首页 > 解决方案 > 如何根据 SQL Server CASE 语句检索列的单条记录

问题描述

我正在尝试编写一个 SQL Server CASE 语句来根据以下条件检索学生的类别。

如果表中的category列对于表中的值student_category同时具有值​​“X”和“Y” ,则仅显示值为“Y”的记录。student_idstudent

如果category具有值“X”或“Y”,则显示具有该值的记录。

如果category没有值“X”或“Y”,则为该列显示一个空白,即,如果有除“X”或“Y”之外的任何其他类别,则显示一个空白。

student_id因此,即使它们有多个类别,我也应该只有一行数据。但是,我仍然会为每个student_id类别获得多个记录。关于我可能遗漏的任何想法?

SELECT DISTINCT
    s.student_id,
    CASE
       WHEN sc.category = 'X' AND sc.category = 'Y' THEN 'Y'
       WHEN sc.category = 'X' OR sc.category = 'Y' THEN sc.category
       ELSE ''
    END AS student_cat
FROM
    student s
LEFT JOIN
    student_category sc ON s.student_id = sc.student_id

标签: sqlsql-serverdatabasecase-statement

解决方案


我想你想要聚合。

select s.student_id, min(sc.category) as student_cat
from student s left join
     student_category sc
     on s.student_id = sc.student_id
group by s.student_id;

我无法从你的问题中看出;你可能想要max()而不是min().


推荐阅读