SQL中如何新增列并从两列中取对应行的有效值?
解决方法:从两列中取非空值生成新列
当然可行!你的需求核心就是从同一行的Col1和Col2里提取非空的那个值,SQL里有非常直接的实现方式,先帮你分析下之前语句的问题,再给出正确方案:
为什么你的原语句不对?
你之前写的concat("Selecting Col1 or 2", cast("Col1" OR "Col2" as string))有两个关键问题:
- 用双引号把列名
Col1/Col2括起来后,它们变成了字符串字面量,而不是引用表中的列; OR是逻辑运算符,只会返回TRUE/FALSE,不是用来提取列值的,所以最终结果肯定不符合预期。
正确实现方式
根据你提供的数据特征(每行只有Col1或Col2有值,另一列为空),可以分两种情况处理:
1. 优先用通用函数 COALESCE(大部分数据库支持)
COALESCE函数的作用是返回参数列表中第一个非NULL的值,刚好匹配你的需求。如果你的空值是SQL标准的NULL,直接用这个就可以:
SELECT Col1, Col2, COALESCE(Col1, Col2) AS relevantinfo FROM your_table_name;
把your_table_name替换成你的实际表名,运行后就能得到你期望的结果。
2. 如果空值是空白字符串(''),用CASE语句判断
如果你的“空”是指空白字符串而不是NULL,可以用CASE做更精确的判断:
SELECT Col1, Col2, CASE WHEN Col1 IS NOT NULL AND Col1 != '' THEN Col1 ELSE Col2 END AS relevantinfo FROM your_table_name;
部分数据库还提供简化的条件函数,比如MySQL的IF:
SELECT Col1, Col2, IF(Col1 != '', Col1, Col2) AS relevantinfo FROM your_table_name;
验证结果
用你提供的测试数据运行上述语句,会得到:
Col1 Col2 relevantinfo 1 1 4 4 3 3 4 4 5 5
完全符合你的期望。
内容的提问来源于stack exchange,提问作者owwoow14
相关产品推荐
相关产品推荐

