SQL 透视命令

标签 sql sql-server pivot

我正在寻求一些有关设计简单枢轴的帮助,以便我可以将其链接到查询的其他部分。

我的数据是这样的

项目表

如果我运行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/

相关文章:

php - 一种全局化mysql函数避免sql注入(inject)的方法

php - 在phpmyadmin中查询两个表

java - Hibernate 无法在具有多个数据源的 Spring 项目中实例化 id 生成器

c# - 从 C# 连接到 SQL Server 时可能会出现哪些错误?

SQL查询问题

sql - 使用 SQL 连接显示正确的结果

sql - 以不同的方式计算客户 - 我需要子查询吗?

iphone - iOS简单的SQL错误

mysql - 在 Sql Server 2012 和 MySQL 中使用动态日期列进行数据透视

oracle - Oracle 数据透视表中的空替换