我有两列:
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
如何为案例选择合适的值?
答案 0 :(得分:4)
rid pid TradeValue
2 1 50
2 3 45
2 4 7
2 5 18
3 1 24
3 2 45
3 4 88
3 5 12
5 1 27
5 2 18
5 3 12
5 4 92
一些解释:
pid_1 pid_2 pid_3 pid_4 pid_5
rid_1 0 50 24 0 27
rid_2 50 0 45 7 18
rid_3 24 45 0 88 12
rid_4 0 7 88 0 92
rid_5 27 18 12 92 0
返回其参数列表中的第一个非空参数。因此,第一个SELECT NULLIF(COALESCE(colA,'')+COALESCE(':'+colB,''), '') FROM myTable
将空COALESCE
变成空字符串。
第二个COALESCE
首先在colA
前加一个冒号-但是如果COALESCE
为null,则尝试附加字符串将返回NULL!因此,如果colB
为null,结果将再次为空字符串,否则为冒号加colB
。
我们附加两个colB
输出。现在,我们有了OP想要的所有东西,除了如果两者都为空,我们就有空字符串。 colB
可以解决这个问题-如果其参数相等,则返回NULL,否则返回第一个参数。
答案 1 :(得分:3)
这应该做到:
Model
DECLARE @t TABLE (cola VARCHAR(100), colb VARCHAR(100));
INSERT INTO @t VALUES
(NULL, NULL),
('a1', NULL),
(NULL, 'b1'),
('a1', 'b1');
SELECT NULLIF(CONCAT(cola, ':' + colb), '')
FROM @t
请记住:
NULL
a1
:b1
a1:b1
运算符如果任何操作数为NULL则产生NULL +
将NULL值视为空字符串CONCAT
可以处理特殊情况答案 2 :(得分:0)
;WITH col_data
As
(SELECT cols = CASE WHEN colA IS NOT NULL THEN colA ELSE '' END
+ CASE WHEN colB IS NOT NULL THEN ': '+colB ELSE '' END
FROM CTE
)
SELECT ISNULL(cols, '') from col_data;