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我的回答对你有用吗?如果是的话,请注明答案。