gpt4 book ai didi

SQL 基于列对数据进行分组,然后将行转置为列

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

这个问题在这里已经有了答案:





SQL Server dynamic PIVOT query?

(7 个回答)


去年关闭。




我正在尝试将我的 SQL 表行转换为列,但我需要根据“测验”列中的组创建结果行。

我已经阅读了有关将行转换为列的线程,但由于我要实现的内容涉及对列进行分组,并且我需要使用“分数”列中的所有值,因此我无法弄清楚如何实现我想要的结果。

原表:

 Quiz |  Name  |  Score
---------------------------
A | Andy | 10
A | Drew | 8
A | Mark | 7
A | Samm | 6
B | Andy | 9
B | Drew | 7
B | Mark | 7
B | Samm | 9

查询结果:
Quiz  |  Andy |  Drew  |  Mark  |  Samm
-----------------------------------------
A | 10 | 8 | 7 | 6
B | 9 | 7 | 7 | 9

任何帮助都受到高度赞赏。

最佳答案

您可以使用 PIVOT

DECLARE @SampleData TABLE (Quiz VARCHAR(5),   Name  VARCHAR(10),   Score INT)
INSERT INTO @SampleData VALUES
('A', 'Andy', 10),
('A', 'Drew', 8 ),
('A', 'Mark', 7 ),
('A', 'Samm', 6 ),
('B', 'Andy', 9 ),
('B', 'Drew', 7 ),
('B', 'Mark', 7 ),
('B', 'Samm', 9 )


SELECT * FROM @SampleData
PIVOT ( MAX(Score) FOR Name IN ([Andy], [Drew], [Mark], [Samm])) AS PVT

如果你想让它动态你可以使用动态枢轴
DECLARE @Columns VARCHAR(MAX) = ''
SELECT @Columns = @Columns + ',' + QUOTENAME( Name ) FROM (SELECT DISTINCT Name FROM SampleData) T
SELECT @Columns = STUFF(@Columns, 1,1,'')

DECLARE @SqlText VARCHAR(MAX) = 'SELECT * FROM SampleData
PIVOT ( MAX(Score) FOR Name IN ('+ @Columns +')) AS PVT'

EXEC (@SqlText)

结果:
Quiz  Andy        Drew        Mark        Samm
----- ----------- ----------- ----------- -----------
A 10 8 7 6
B 9 7 7 9

关于SQL 基于列对数据进行分组,然后将行转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60906424/

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