如何使用SQL的CASE语句根据另一列值填充目标列空字段
需求背景
我是SQL初学者,未接受过系统的SQL相关培训,因工作需要临时使用SQL,在此先行感谢各位的帮助。
当前我有一个返回3列数据的查询,其中column3存在部分空单元格,需要根据column1的取值填充这些空值,规则如下:
- 当
column1值为'Individual'时,对应为空的column3显示'Individual' - 当
column1值为'group'时,对应为空的column3显示'group' - 其余场景下
column3保持原有值不变
我之前尝试编写的SQL语句存在错误,代码如下:
CASE column1 = 'Individual' then Column3 should show 'Individual' not empty, but if column1 = 'group' them column3 needs to show "group" else no change. SELECT column1, column2, column3, CASE WHEN column1 = 'Individual' THEN Column3 = 'Individual' WHEN column1 = "Group' THEN comlumn3 = 'Group' END FROM tablename
正确实现方法
你之前写的语句有几个明显的语法错误:
- 字符串引号混用,出现了单双引号不配对的问题,还存在列名拼写错误
CASE表达式的THEN后直接写需要返回的值即可,不需要写列名 = 值的赋值格式- 缺少
ELSE分支,不满足前两个条件的场景会默认返回NULL,无法实现“其余情况保持不变”的需求 - 没有做空值判断,会把原本非空的
column3值也覆盖掉 CASE表达式结束后需要加别名,才能作为结果列正常返回
修正后的可直接运行的SQL如下:
SELECT column1, column2, CASE WHEN column3 IS NOT NULL THEN column3 WHEN column1 = 'Individual' THEN 'Individual' WHEN column1 = 'group' THEN 'group' ELSE column3 END AS column3 FROM tablename;
补充说明:如果你的
column3里的“空单元格”是空字符串('')而非数据库标准NULL值,只需要把判断条件column3 IS NOT NULL替换为column3 != ''即可适配。
内容的提问来源于stack exchange,提问作者World on Fire
相关产品推荐
相关产品推荐

