Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中连接两个列值_Sql_Sql Server_String - Fatal编程技术网

在SQL中连接两个列值

在SQL中连接两个列值,sql,sql-server,string,Sql,Sql Server,String,我有两个专栏: colA colB a1 b1 NULL b2 a3 NULL 对于以下情况,我希望在SELECT查询中连接两列: 如果colA的值为NULL且colB为NULL返回NULL 如果colA的值为空且colB不为空返回:b1 如果colA的值不为NULL且colB为NULL返回a1 如果两个值都不为空返回a1:b1 如何为案例选择合适的值 SELECT NULLIF(COALESCE(colA,'')+COALESCE(':'+colB,''),

我有两个专栏:

colA    colB
a1      b1
NULL    b2
a3      NULL
对于以下情况,我希望在SELECT查询中连接两列:

如果
colA的值为NULL
colB为NULL
返回
NULL

如果
colA的值为空
colB不为空
返回
:b1

如果
colA的值不为NULL
colB为NULL
返回
a1

如果
两个值都不为空
返回
a1:b1

如何为案例选择合适的值

SELECT NULLIF(COALESCE(colA,'')+COALESCE(':'+colB,''), '') FROM myTable
一些解释:

COALESCE
返回其参数列表中的第一个非空参数。因此,第一个
COALESCE
将null
colA
转换为空字符串

第二个
COALESCE
首先在
colB
前面加一个冒号,但是如果
colB
为null,尝试附加字符串将返回null!因此,如果
colB
为null,则结果再次为空字符串,如果不是null,则为冒号加上
colB

我们附加两个
合并
输出。我们现在拥有OP想要的所有内容,除了如果两者都为null,那么我们就拥有空字符串
NULL如果
处理这个问题——如果其参数相等,则返回NULL,否则返回第一个参数

这应该可以做到:

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
  • CONCAT
    将空值视为空字符串
  • NULLIF
    是否有处理特殊情况的方法

请向我们展示您目前的代码。哎呀。。。感谢@MatBallieNice solution…我总是忘记
CONCAT
,而不是硬编码列名称中提到的值。。。做得好
;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;