2011-12-02 40 views
3

我不太清楚我需要问什么来解决这个问题,即。这是否是子查询,按组,工会/加盟问题,否则完全的东西...TSQL:根据值将一列分成两部分

我有一个学生成绩表的设置是这样的:

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 

我希望我的问题合理,任何帮助,将不胜感激!

+0

是否有一个原因,为什么你非规范化的数据?这通常不是最好的想法(因此,如果你正在寻找一个规范化的结果集,为什么这个查询会非常简单)。 – 2011-12-02 03:52:22

+0

此查询的目的是为了能够根据结果比较性别。例如。数学中女生比男生获得更多的A +吗? – Paul

回答

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

亚当你是传奇!这工作出色!谢谢! – Paul

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