sql - 在 SQL 中连接两个列值
问题描述
我有两列:
colA colB
a1 b1
NULL b2
a3 NULL
对于以下情况,我想在 SELECT 查询中连接两列:
如果值
colA is NULL
和colB is NULL
返回NULL
如果值colA is NULL
和colB is NOT NULL
返回:b1
如果值colA is NOT NULL
和colB is NULL
返回a1
如果both values are NOT NULL
返回a1:b1
如何为案例选择合适的值?
解决方案
SELECT NULLIF(COALESCE(colA,'')+COALESCE(':'+colB,''), '') FROM myTable
一些解释:
COALESCE
返回其参数列表中的第一个非空参数。因此,第一个COALESCE
将 nullcolA
转换为空字符串。
第二个COALESCE
第一个在前面加上一个冒号colB
-- 但如果colB
为空,则尝试附加一个字符串将返回 NULL!因此,如果为空,则结果再次为空字符串,如果colB
不是,则为冒号加colB
号。
我们附加两个COALESCE
输出。我们现在拥有了 OP 想要的一切,除了如果两者都为空,我们有空字符串。 NULLIF
负责这一点——如果它的参数相等,则返回 NULL,否则返回第一个参数。
推荐阅读
- typescript - 如何为 Vuex 定义 VueJS3 Typescript 接口
- python - 熊猫数据透视表,排序值
- unit-testing - 在具有 FreeRTOS 依赖性的项目中进行单元测试
- python-3.x - _pickle.UnpicklingError:pickle 数据被截断第 27 行 Server.py
- swift - 命令 Ld 失败,退出代码为非零
- javascript - 如何将“新”元素/对象添加到 javascript 列表中?
- reactjs - 如何摆脱useEffect中的依赖错误?
- java - In Processing - 一个声音文件贯穿整个动画,但只有一个类对象与声音交互
- r - 由于 is_corpus_df(corpus) 中的错误导致 Bind_tf_idf 错误:ncol(corpus) >= 2 is not TRUE
- python - 具有恒定频率的python wordcloud