连接SQL中的两个列值

时间:2018-11-08 13:36:01

标签: sql sql-server string

我有两列:

colA    colB
a1      b1
NULL    b2
a3      NULL

在以下情况下,我想将SELECT查询中的两列连接起来:

  

如果colA is NULLcolB is NULL的值返回NULL
  如果colA is NULLcolB is NOT NULL的值返回:b1
  如果colA is NOT NULLcolB is NULL的值返回a1
  如果both values are NOT NULL返回a1:b1

如何为案例选择合适的值?

3 个答案:

答案 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;