gpt4 book ai didi

sql - 将行值转换为 SQL Server 中的列 (PIVOT)

转载 作者:行者123 更新时间:2023-12-04 17:50:48 24 4
gpt4 key购买 nike

我在 SQL Server 中有一个名为 test 的表,有 3 列

|  ITEM | ATTRIBUTE | VALUE |
-----------------------------
| item1 | Quality | A |
| item1 | color | Red |
| item2 | Quality | B |
| item2 | color | Black |

我想要这样的输出:
|  ITEM | QUALITY | COLOR |
---------------------------
| item1 | A | Red |
| item2 | B | Black |

如何在SQL Server中获得此信息。

最佳答案

试试这个:

SELECT *
FROM (SELECT Item, attribute, value FROM MyTable) AS t
PIVOT
(
MAX(value)
FOR attribute IN([Quality], [Color])
) AS p;

输出:
╔═══════╦═════════╦═══════╗
║ ITEM ║ QUALITY ║ COLOR ║
╠═══════╬═════════╬═══════╣
║ item1 ║ A ║ Red ║
║ item2 ║ B ║ Black ║
╚═══════╩═════════╩═══════╝

this SQLFiddle

如果您不知道 attribute 的具体值,也可以使用此动态查询:
DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(attribute)
from MyTable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')


set @query = 'SELECT Item,' + @cols + '
from
(
Select Item, attribute , value
from MyTable
) dta
pivot
(
MAX(Value)
for attribute in (' + @cols + ')
) pvt '

execute(@query);

this SQLFiddle

关于sql - 将行值转换为 SQL Server 中的列 (PIVOT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com