SQL Pivot命令

Rob*_*ert 5 sql sql-server pivot

我正在寻找一些关于设计简单数据透视的帮助,以便我可以将它链接到我的查询的其他部分.

我的数据是这样的

物品表

如果我跑,下面是我的表 Select * from items

ITEM      Weight    
12345         10    
12345         11    
654321        50    
654321        20    
654321       100
Run Code Online (Sandbox Code Playgroud)

此表中有数百个项目,但每个项目代码每个最多只有3个权重记录.

我想要所需的输出

ITEM     Weight_1    Weight_2     Weight_3
12345          10          11         null
654321         50          20          100
Run Code Online (Sandbox Code Playgroud)

将会感激任何建议,我已经玩过枢轴,但每个后续项目将权重放入权重4,5,6,7等,而不是从每个项目的权重1开始.

谢谢

更新

以下是我到目前为止使用的,

SELECT r.*
FROM   (SELECT 'weight' + CAST(Row_number() OVER (ORDER BY regtime ASC)AS
                               VARCHAR(10))
                      line,
               id,
               weight
        FROM   items it) AS o PIVOT(MIN([weight]) FOR line IN (weight1, weight2,
       weight3)) AS r  
Run Code Online (Sandbox Code Playgroud)

Adr*_*iro 2

你就快到了!您只是缺少PARTITION BY以下子句OVER

SELECT r.*
FROM   (SELECT 'weight' + CAST(Row_number() OVER (PARTITION BY id ORDER BY
                               regtime ASC)
                                      AS
                                              VARCHAR(10)) line,
               id,
               weight
        FROM   items it) AS o PIVOT(MIN([weight]) FOR line IN (weight1, weight2,
       weight3)) AS r  
Run Code Online (Sandbox Code Playgroud)

当您PARTITION BY按 ID 时,会为每个不同的 ID 重置行号。

更新

您不需要动态枢轴,因为您始终有 3 个权重。但是,如果您需要动态的列数,请查看此处的一些示例: