SQL查询行作为列[重复]

Posted

技术标签:

【中文标题】SQL查询行作为列[重复]【英文标题】:SQL query rows as columns [duplicate] 【发布时间】:2014-04-09 18:38:48 【问题描述】:

我有一个这样的数据表:

RecID     Name      Value
1         Color     Red
2         Size      Small
3         Weight    20lbs
4         Shape     Square

我需要一个将行作为列返回的查询,如下所示:

Color     Size     Weight     Shape
Red       Small    20lbs      Square

执行此操作的 SQL 查询会是什么样子?我无法将任何值硬编码到查询中,它只需要读取名称和值对并水平重新定向它们。

【问题讨论】:

你们一直标记为重复的答案没有我需要的答案。 此处正确答案:***.com/questions/23060311/… 【参考方案1】:

测试数据

DECLARE @Table TABLE(RecID INT,Name VARCHAR(20),Value VARCHAR(20))
INSERT INTO @Table VALUES
(1,'Color' ,'Red'),
(2,'Size'  ,'Small'),
(3,'Weight','20lbs'),
(4,'Shape' ,'Square')

查询

SELECT *
FROM
(SELECT Name,Value 
FROM @Table) T
PIVOT ( MAX(Value)
        FOR Name
        IN ([Color],[Size],[Weight],[Shape])
        )P

结果集

╔═══════╦═══════╦════════╦════════╗
║ Color ║ Size  ║ Weight ║ Shape  ║
╠═══════╬═══════╬════════╬════════╣
║ Red   ║ Small ║ 20lbs  ║ Square ║
╚═══════╩═══════╩════════╩════════╝

【讨论】:

我无法硬编码 [Color]、Size],就像您在 IN 分组中那样。有没有办法查询名称值对并在不知道它们是什么的情况下水平重新定向它们? 要动态旋转未知数量的列,请参阅此答案How to pivot unknown number of columns & no aggregate in SQL Server?,如果此答案对您有所帮助,请考虑接受它作为您的答案,谢谢。 SQL 不是最好的,我会看看我想出什么。谢谢!

以上是关于SQL查询行作为列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询从通配符列等于值的所有表中选择所有行[重复]

SQL查询从通配符列等于值的所有表中选择所有行[重复]

sql怎么添加自定义列并且将此列的数据作为条件查询

sql查询消除重复记录

SQL 查询有效地选择不完美的重复项

Sql连表查询