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(即根据表中找到的值构建查询字符串,然后执行它) - 这是另一个野兽。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3994 次  |  
        
|   最近记录:  |