TSQL:根据值将一列拆分为两列

3

我不太清楚我需要问什么来解决这个问题,比如是否是子查询、按组分组、联合/连接问题,还是完全不同的问题...

我设置了一个类似于以下结构的学生成绩表:

student gender class result
------- ------ ----- ------
Bob     M      Math  A+
Mary    F      Math  A+
Peter   M      Math  A+
Jane    F      Math  B

我的要求是能够按班级聚合结果,但同时观察性别差异。例如(基于上述示例表格):

males females class result
----- ------- ----- ------
2     1       Math  A+
0     1       Math  B

希望我的问题表述清晰,非常感谢您的帮助!


你为什么要对数据进行反规范化处理?通常这不是最好的选择(因此,如果你想要一个规范化的结果集,那么查询会非常简单)。 - user596075
这个查询的目的是基于结果能够比较性别。例如,在数学方面,女孩是否比男孩获得更多A+? - Paul
2个回答

7
你需要的查询应该是这样的,使用 SUM() 聚合函数,并且使用 GROUP BY
SELECT SUM(CASE
              WHEN Gender = 'M' THEN 1
              ELSE 0
           END) AS Males
   , SUM(CASE
            WHEN Gender = 'F' THEN 1
            ELSE 0
         END) AS Females
   , class
   , result
FROM student
GROUP BY class, result

0
SELECT CLASS,
RESULT,
SUM(CASE WHEN GENDER ='M' THEN 1 ELSE 0 END) MALE ,
SUM(CASE WHEN GENDER ='F' THEN 1 ELSE 0 END) FEMALE
FROM TABLE_1
GROUP BY CLASS,RESULT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接