我在这个项目中有一个Order
表
OrderNo, ProductCode
他们分别参考OrderDetails
和ProductDetails
表格。
单个Order
可以容纳多个产品(例如此处最多4个),但每个订购的产品都有单独的行。
因此,数据可能如下:
OrderNo ProductCode
--------------------
1 Gadget1
1 CaseCover1
1 Cable1
我要求显示如下所示的报告:
OrderNo ProductName1 ProductName2 ProductName3 ProductName4
1 Gadget1 CaseCover1 Cable1 NULL
它不是连接,而是显示不同的列。
请帮助我,如何通过Minimal或No Join实现此目的。 (这里的目标是尽可能快地运行查询。有数千个订单记录。插入和选择每秒发生一次。)
非常感谢。
答案 0 :(得分:0)
使用PIVOT和Row_Number()函数我们可以实现这一点。请参阅下面的查询
SELECT [OrderNo],[1] as Product1 ,[2] as Product2,[3] as Product3,[4] as Product4 FROM
(
SELECT
[OrderNo],
Row_Number() OVER (PARTITION BY [OrderNo] ORDER BY ProductCode desc)as ProductNumber,
[ProductCode] FROM [Order]
) Source
PIVOT
(
MAX(ProductCode) FOR ProductNumber in ([1],[2],[3],[4])
)Pivottable
查看输出图像
以下是我的订单表格如何