Azi*_*l H 5 sql t-sql sql-server pivot group-by
我正在尝试将 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
Run Code Online (Sandbox Code Playgroud)
查询结果:
Quiz | Andy | Drew | Mark | Samm
-----------------------------------------
A | 10 | 8 | 7 | 6
B | 9 | 7 | 7 | 9
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助。
对于固定的名称列表,您可以进行条件聚合:
select
quiz,
max(case wen name = 'Andy' then score end) Andy,
max(case wen name = 'Drew' then score end) Drew,
max(case wen name = 'Mark' then score end) Mark,
max(case wen name = 'Sam' then score end) Sam
from mytable
group by quiz
Run Code Online (Sandbox Code Playgroud)
如果您想要根据表中找到的名称动态生成列,那么这不能使用纯 SQL 来完成。您需要动态 SQL(即根据表中找到的值构建查询字符串,然后执行它) - 这是另一个野兽。