首页 > 解决方案 > 在基于其他列的 where 子句中使用 case 表达式选择条件

问题描述

我正在尝试根据列级别返回列等级的计数。如果列 Level 等于“1”,那么我想计算列 ID 的所有行,其中 Grade 是“A”、“B”、“C”或“D”。如果列“Level”等于“2”,那么我想计算列 ID 的所有行,其中 Grade 为“A”、“B”或“C”,

示例表:

在此处输入图像描述

示例输出:

在此处输入图像描述

标签: sqlsql-servercase

解决方案


SELECT ID,SUM(CASE WHEN Level=1 AND Grade IN ('A','B','C','D') THEN 1 
            WHEN Level=2 AND Grade IN ('A','B','C') THEN 1
            ELSE 0
       END AS GradeCount
FROM YourTable
GROUP BY ID;

推荐阅读