【问题标题】:Combine Multiple Order rows into Single Row将多个订单行合并为单行
【发布时间】:2014-01-30 07:23:48
【问题描述】:

我在这个项目中有一个Order

OrderNo, ProductCode

具体参考OrderDetailsProductDetails表。

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

因此,数据可能是:

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

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

OrderNo   ProductName1   ProductName2   ProductName3   ProductName4
  1       Gadget1        CaseCover1     Cable1         NULL

不是串联,而是显示不同的列。

请帮助我,我如何通过最小连接或无连接来实现这一点。 (这里的目标是尽可能快地运行查询。有成千上万的订单记录。插入和选择每秒发生一次。)

非常感谢。

【问题讨论】:

  • ProductDetails 有 ProductCode 和 ProductName 作为列
  • @iTSrAVIE 我的回答对你有用吗?如果是,请将其标记为答案。

标签: sql database sql-server-2008 tsql


【解决方案1】:

使用 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

查看输出图片

这是我的订单表的样子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2021-08-31
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多