仅当列不为NULL时才连接列

时间:2016-11-01 14:19:36

标签: sql sql-server tsql sentence

我有一个像这样的SQL Server表:

-------------------------------------------------------------------
PERSON
-------------------------------------------------------------------
   NAME   |   PHONE   |   PHONE1   |   PHONE2   |   PHONE_CONCAT  
-------------------------------------------------------------------
   Name1  |   12345   |   Null     |   Null     |   Null
   Name2  |   Null    |   54774    |   Null     |   Null
   Name3  |   Null    |   Null     |   77841    |   Null
-------------------------------------------------------------------

我想要做的是,当其中一列的值为!= null时,将PHONE,PHONE1和PHONE2列连接到PHONE_CONCAT。因此,在这种情况下,PHONE_CONCAT列的最终值将是:

------------------
PERSON
------------------
   PHONE_CONCAT  
------------------
   12345
   54774
   77841
 ------------------

请你帮我执行这个动作吗?

我想更新PHONE_CONCAT值,因此我需要对表中的每一行执行更新。

3 个答案:

答案 0 :(得分:7)

这是你想要的吗?

select coalesce(t.phone, t.phone1, t.phone2) as phone_concat
from t;

这将返回非NULL第一个电话号码。这似乎是获得理想结果的最简单方法。

答案 1 :(得分:5)

作为选择陈述:

SELECT COALESCE(t.phone,'') + COALESCE(t.phone1,'') + COALESCE(t.phone2,'') 
FROM PERSON t

或者如果您想要更新它:

UPDATE PERSON t
SET t.PHONE_CONCAT = COALESCE(t.phone,'') + COALESCE(t.phone1,'') + COALESCE(t.phone2,'') 

答案 2 :(得分:0)

WITH PERSON AS (
SELECT * FROM (VALUES
 ('Name1' , '12345' , Null , Null , Null),
 ('Name2' , Null , '54774' , Null , Null),
 ('Name2a', Null , '54774' , Null , '4356'),
 ('Name3' , Null , Null , '77841' , Null))
 s( NAME , PHONE , PHONE1 , PHONE2 , PHONE_CONCAT )) 
SELECT NAME ,TRIM(CONCAT( PHONE + ' ', PHONE1 + ' ', PHONE2 + ' ', PHONE_CONCAT)) FROM PERSON

将会是:

NAME   
------ ----------------------
Name1  12345
Name2  54774
Name2a 54774 4356
Name3  77841

(4 rows affected)