我有一个像这样的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值,因此我需要对表中的每一行执行更新。
答案 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)