如何为SQL查询结果最后一列添加条件注释(不修改数据库)
解决SQL查询中添加条件注释列的问题
我来帮你搞定这个SQL的问题,先理清楚来龙去脉:
你的需求
你想要在SQL查询的最后一列新增一个注释列,规则是当technical_document表的disc_id字段匹配"KN"时,该列显示"OK"。
初始代码的问题
你写的初始SQL有几个明显的语法错误,导致无法运行:
- CASE表达式的结构完全错误,你错误地把
tag_document.project_id AS "COMMENT"和CASE逻辑混在一起,还出现了tag_document.project_id = "YES"这种不符合CASE语法的写法 - 没有用
END关键字闭合CASE语句,这是CASE表达式的必要结构 - 如果是要判断
disc_id包含"KN",应该用LIKE '%KN%',而初始代码里用的是=,不过看你修正后的代码是精确匹配"KN",这里按你的需求来
修正后的可行代码
SELECT technical_document.project_no, technical_document.doc_no, technical_document.doc_class, technical_document.disc_id, CASE WHEN technical_document.disc_id LIKE 'KN' THEN 'OK' WHEN technical_document.disc_id LIKE 'K6' THEN 'OK' ELSE null END AS comment FROM technical_document LEFT JOIN tag_document ON technical_document.doc_no = tag_document.proj_doc_doc_no WHERE tag_document.proj_doc_doc_no IS NULL AND technical_document.project_no like '%%' AND technical_document.doc_class = ANY ('A','S','SE') AND technical_document.Lci_Code = ANY ('A','A1','B')
(我给CASE的结果列加了AS comment来明确列名,你可以根据实际需求修改这个别名)
修正要点
- 将CASE表达式作为独立的查询字段放在SELECT列表的最后,结构清晰
- 遵循CASE表达式的标准语法:
CASE WHEN 条件 THEN 返回值 ... ELSE 默认返回值 END - 补充了
K6的判断分支(如果不需要这个规则,可以直接删掉该WHEN行) - 确保整个SQL的语法结构完整,JOIN关联、WHERE条件的逻辑都正确执行
内容的提问来源于stack exchange,提问作者Truls Sønsteby
相关产品推荐
相关产品推荐

