You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Case表达式同列判断失效 如何按选课为学生返回唯一编码

问题原因

你的原查询存在三个核心问题:

  1. 逐行判断逻辑不可能识别双课组合:每一行课程记录仅对应一个CourseCode,CourseCode = '100001' and CourseCode = 'BH0001'这类条件永远不可能成立,所以双课分支永远不会触发。
  2. 没有按学生聚合:没有对StudentID做分组操作,一个学生选了几门课就会返回几条记录,自然得不到合并后的单条结果。
  3. 分支优先级错误:就算逻辑成立,你把单课判断放在组合判断前面,会优先命中单课分支,也走不到组合判断的逻辑。

解决方案

先按学期、学生ID分组聚合,先判断双课组合的场景,再匹配单课场景即可,参考查询语句如下:

SELECT 
    StudentID,
    CASE
        -- 优先判断双课组合
        WHEN COUNT(CASE WHEN CourseCode = '100001' THEN 1 END) = 1 
             AND COUNT(CASE WHEN CourseCode = 'BH0001' THEN 1 END) = 1 THEN 'BH01'
        WHEN COUNT(CASE WHEN CourseCode = '400001' THEN 1 END) = 1 
             AND COUNT(CASE WHEN CourseCode = 'BH0002' THEN 1 END) = 1 THEN 'BH04'
        -- 再判断单课场景
        WHEN COUNT(CASE WHEN CourseCode = '100001' THEN 1 END) = 1 THEN 'AAN1'
        WHEN COUNT(CASE WHEN CourseCode = '400001' THEN 1 END) = 1 THEN 'AAN4'
        WHEN COUNT(CASE WHEN CourseCode = 'BH0001' THEN 1 END) = 1 THEN 'BABH'
        WHEN COUNT(CASE WHEN CourseCode = 'BH0002' THEN 1 END) = 1 THEN 'BPBH'
    END AS CustomCode
FROM Courses
GROUP BY TermCode, StudentID
ORDER BY StudentID;

逻辑说明

  • GROUP BY TermCode, StudentID保证同一个学期的同一个学生仅返回1条记录
  • 用COUNT(CASE WHEN 课程条件 THEN 1 END)来统计学生是否修了对应课程,聚合后可以识别多课程的组合场景
  • 组合判断放在单课判断前面,避免优先级错误导致组合分支不触发

执行上述查询即可得到你期望的结果。


内容的提问来源于stack exchange,提问作者RAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:18:01