我正在寻求一些有关设计简单枢轴的帮助,以便我可以将其链接到查询的其他部分。
我的数据是这样的
项目表
如果我运行Select * from items
,下面是我的表格
ITEM Weight
12345 10
12345 11
654321 50
654321 20
654321 100
此表中有数百个项目,但每个项目代码只会有 每条最多 3 条体重记录。
我想要想要的输出
ITEM Weight_1 Weight_2 Weight_3
12345 10 11 null
654321 50 20 100
非常感谢任何建议, 我尝试过使用枢轴,但每个后续项目都将权重放入权重 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
最佳答案
你就快到了!您只是缺少 OVER
中的 PARTITION BY
子句:
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
当您按 ID PARTITION BY
时,会针对每个不同的 ID 重置行号。
更新
您不需要动态枢轴,因为您始终有 3 个权重。但是,如果您需要动态的列数,请查看此处的一些示例:
关于SQL 透视命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348444/