首页 > 解决方案 > 选择子句中的 SQL Server case 语句

问题描述

我有一个查询,它给了我 StudentId 和 PercentageScored 在学生参加的考试中,一个学生可以参加多个考试

StudentId | PercentageScored
    101         82
    102         57
    101         69
    103         71
    103         42

下面是一个示例查询,我的实际查询类似于下面。

Select s.StudentId, m.[PercentageScored]
FROM dbo.[Student] S
Inner join dbo.[Marks] m
ON S.[StudentId] = m.[StudentId]
WHERE S.[StudentGroup] = 12 AND S.[Active] = 1 

现在我需要添加一些逻辑,以便我的输出如下所示

StudentId  | FirstClass | SecondClass | ThirdClass
   101
   102
   103
   104

如果学生的百分比得分高于 80% 然后是一等,百分比得分在 60 到 80 % 之间然后是二等,百分比得分低于 60% 然后是三等.. 我需要给出计数,对于一个给定的学生,他有多少次得分超过 80 %,60-80%之间多少次,60%以下多少次

标签: sqlsql-server

解决方案


使用条件聚合:

SELECT
    s.StudentId,
    COUNT(CASE WHEN m.[PercentageScored] > 80 THEN 1 END) AS FirstClass,
    COUNT(CASE WHEN m.[PercentageScored] > 60 AND
                    m.[PercentageScored] <= 80 THEN 1 END) AS SecondClass,
    COUNT(CASE WHEN m.[PercentageScored] <= 60 THEN 1 END) AS ThirdClass
FROM dbo.[Student] s
INNER JOIN dbo.[Marks] m
    ON s.[StudentId] = m.[StudentId]
WHERE
    s.[StudentGroup] = 12 AND s.[Active] = 1
GROUP BY
    s.StudentId;

推荐阅读