UNION语句使用问题:基于Students表生成含计算列Status的结果集
解决你的SQL Server UNION查询问题
嘿,我知道你在SQL作业里卡壳了,试过谷歌和问朋友都没搞定,别着急,我来帮你解决这个用UNION生成结果集的问题!
首先,按照你的要求——用UNION运算符,把学生分成"UNDERGRAD"(在读)和"GRADUATED"(已毕业)两类,生成包含指定五列的结果集,对应的SQL代码如下:
SELECT 'UNDERGRAD' AS Status, FirstName, LastName, EnrollmentDate, GraduationDate FROM Students WHERE GraduationDate IS NULL UNION SELECT 'GRADUATED' AS Status, FirstName, LastName, EnrollmentDate, GraduationDate FROM Students WHERE GraduationDate IS NOT NULL
代码解释:
- 第一个
SELECT语句专门筛选GraduationDate为空的在读学生,手动指定Status列的值为UNDERGRAD,同时取出你需要的其他四列。 - 第二个
SELECT语句筛选GraduationDate不为空的已毕业学生,Status列固定为GRADUATED,列结构和第一个查询完全一致(这是UNION的核心要求:两个查询的列数、数据类型必须严格匹配)。 - 用
UNION合并两个结果集时,它会自动去除重复的行。如果你的数据里没有重复学生记录,或者不需要去重逻辑,可以换成UNION ALL,执行效率会更高。
额外小提示:
其实如果作业没有强制要求必须用UNION,用CASE语句写会更简洁高效,只需要一次查询就能完成逻辑判断,代码如下:
SELECT CASE WHEN GraduationDate IS NULL THEN 'UNDERGRAD' ELSE 'GRADUATED' END AS Status, FirstName, LastName, EnrollmentDate, GraduationDate FROM Students
这个写法更符合SQL的最佳实践,不过既然你明确要求用UNION,第一种方案就完全符合你的需求,在SSMS 18里直接运行就能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Scott Hoffman
相关产品推荐
相关产品推荐

