【问题标题】:TSQL: Split one column into two based on valueTSQL:根据值将一列分成两列
【发布时间】:2011-12-02 03:50:09
【问题描述】:

我不太确定我需要问什么来解决这个问题,即。无论这是子查询、分组依据、联合/加入问题还是完全其他的问题......

我有一个学生成绩表设置如下:

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

我希望我的问题是有意义的,任何帮助将不胜感激!

【问题讨论】:

  • 你对数据进行非规范化有什么原因吗?这通常不是最好的主意(因此,如果您正在寻找规范化的结果集,为什么这个查询会非常简单)。
  • 此查询的目的是能够根据结果比较性别。例如。女孩的数学成绩比男孩多吗?

标签: sql sql-server tsql


【解决方案1】:

您需要的查询如下所示,使用 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

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2018-08-30
      相关资源
      最近更新 更多