将多个订单行合并为单个行

时间:2014-01-30 07:23:48

标签: sql database sql-server-2008 tsql

我在这个项目中有一个Order

OrderNo, ProductCode

他们分别参考OrderDetailsProductDetails表格。

单个Order可以容纳多个产品(例如此处最多4个),但每个订购的产品都有单独的行。

因此,数据可能如下:

OrderNo  ProductCode
--------------------    
  1      Gadget1
  1      CaseCover1
  1      Cable1

我要求显示如下所示的报告:

OrderNo   ProductName1   ProductName2   ProductName3   ProductName4
  1       Gadget1        CaseCover1     Cable1         NULL

它不是连接,而是显示不同的列。

请帮助我,如何通过Minimal或No Join实现此目的。 (这里的目标是尽可能快地运行查询。有数千个订单记录。插入和选择每秒发生一次。)

非常感谢。

1 个答案:

答案 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

查看输出图像enter image description here

以下是我的订单表格如何enter image description here