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

Sql 将多个订单行合并为一行,sql,database,sql-server-2008,tsql,Sql,Database,Sql Server 2008,Tsql,我在这个项目中有一个订单表 OrderNo, ProductCode 详细信息请分别参考OrderDetails和ProductDetails表 单个订单可以容纳多个产品(此处最多4个),但每个订购的产品都有单独的行 因此,数据可能类似于: OrderNo ProductCode -------------------- 1 Gadget1 1 CaseCover1 1 Cable1 我有一个显示报告的要求,该报告如下所示: OrderNo

我在这个项目中有一个
订单

OrderNo, ProductCode
详细信息请分别参考
OrderDetails
ProductDetails

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

因此,数据可能类似于:

OrderNo  ProductCode
--------------------    
  1      Gadget1
  1      CaseCover1
  1      Cable1
我有一个显示报告的要求,该报告如下所示:

OrderNo   ProductName1   ProductName2   ProductName3   ProductName4
  1       Gadget1        CaseCover1     Cable1         NULL
它不是串联,而是显示不同的列

请帮助我,我如何在最少或没有连接的情况下实现这一点。 (这里的目标是尽可能快地运行查询。有数千条订单记录。插入和选择每秒钟发生一次。)

非常感谢。

使用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
查看输出图像


下面是我的订单表的外观

ProductDetails将ProductCode和ProductName作为columns@iTSrAVIE我的回答对你有用吗?如果是的话,请注明答案。