【发布时间】:2017-05-20 01:12:33
【问题描述】:
我正在寻找一个性能良好的 T-SQL 查询来提供大量行 N 列。但是每行的列数不会相同。
例如 - 我有一个类似以下的订单表,大约有 100 万行。
命令 订单 ID 日期 ======== ======== 1 20160102 2 20160402每个订单可以有 N 个订单行。
我的订单表有大约 150 万行;
订单行 OrderID OrderLine ProductID 金额 ==================================== 1 1 3245 299.00 2 1 9876 799.00 2 2 5466 899.00 2 3 7752 599.00我想要如下的最终结果:
OrderID 日期 ProductID1 Amount1 ProductID2 Amount2 ProductID3 Amount3 =================================================== ========== ======= 1 20160102 3245 299.00 2 20160402 9876 799.00 5466 899.00 7752 599.00每个订单的订单行数可以很大(例如 50 个)。
我想我可以使用子选择,但这需要 N 个子选择 - 而且效果会很差
选择 订单号, 日期, (SELECT ProductID from ORDERLINE OI JOIN O ON O.OrderID=OI.OrderID WHERE ORDERLINE=1) AS ProductID1, (SELECT Amount FROM ORDERLINE OI JOIN O ON O.OrderID=OI.OrderID WHERE ORDERLINE=1) 作为 Amount1, ... (SELECT ProductID from ORDERLINE OI JOIN O ON O.OrderID=OI.OrderID WHERE ORDERLINE=N) AS ProductIDN, (SELECT Amount FROM ORDERLINE OI JOIN O ON O.OrderID=OI.OrderID WHERE ORDERLINE=N) AS AmountN 从 订购 O另一个选项可能是旋转。 但在我看来——这不是“传统”的旋转——它是动态旋转。
但我不确定它的外观和性能如何?
【问题讨论】:
标签: sql sql-server