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)
你就快到了!您只是缺少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 个权重。但是,如果您需要动态的列数,请查看此处的一些示例: