[英]Concatenate multiple columns, with null values
我想串聯多個列,以;
分隔 ,在MS-SQL Server 2008中。
我遇到的問題是,沒有CONCAT()
我將不知道如何處理NULL
列,也不會得到像這樣的結果tattoos;comics;;;
在這里,您具有創建示例數據的腳本:
declare @tbl as table (
id int
,kw1 varchar(15)
,kw2 varchar(15)
,kw3 varchar(15)
,kw4 varchar(15)
,kw5 varchar(15)
);
insert into @tbl values
(1, 'innocence', 'graphic novel', 'cartoon', NULL, 'comics')
,(2, 'tattoos', 'comics', NULL, NULL, NULL)
,(3, NULL, 'music', 'cartoon', 'adventure', 'film')
和表:
+----+-----------+---------------+---------+-----------+--------+
| id | kw1 | kw2 | kw3 | kw4 | kw5 |
+----+-----------+---------------+---------+-----------+--------+
| 1 | innocence | graphic novel | cartoon | NULL | comics |
| 2 | tattoos | comics | NULL | NULL | NULL |
| 3 | NULL | music | cartoon | adventure | film |
+----+-----------+---------------+---------+-----------+--------+
所以我的實際結果是這樣的:
+----+-----------------------------------------+
| id | Keywords |
+----+-----------------------------------------+
| 1 | innocence;graphic novel;cartoon;;comics |
| 2 | tattoos;comics;;; |
| 3 | ;music;cartoon;adventure;film |
+----+-----------------------------------------+
但這就是我想要的:
+----+----------------------------------------+
| id | Keywords |
+----+----------------------------------------+
| 1 | innocence;graphic novel;cartoon;comics |
| 2 | tattoos;comics |
| 3 | music;cartoon;adventure;film |
+----+----------------------------------------+
查詢:
SET CONCAT_NULL_YIELDS_NULL OFF;
select
id
,kw1 + ';' + kw2 + ';' + kw3 + ';' + kw4 + ';' + kw5 as Keywords
FROM @tbl
任何幫助表示贊賞!
在沒有CONCAT()
(SQL Server 2008+)的情況下,可以這樣使用ISNULL()
:
SELECT
t.id ,
ISNULL(t.kw1 + ';', '') + ISNULL(t.kw2 + ';', '') +
ISNULL(t.kw3 + ';', '') + ISNULL(t.kw4 + ';', '') +
ISNULL(t.kw5 + ';', '') AS Vals
FROM
@tbl AS t;
如果列值為NULL
則連接NULL + ';'
會產生NULL
,因此給你空字符串''
。
對於2008+,您將像這樣使用CONCAT()
:
SELECT
t.id ,
CONCAT(t.kw1 + ';' ,t.kw2 + ';',t.kw3 + ';' ,t.kw4 + ';', t.kw5+ ';') as Vals
FROM
@tbl AS t
兩者都會產生以下結果:
id Vals
----------- -----------------------------------------------
1 innocence;graphic novel;cartoon;comics;
2 tattoos;comics;
3 music;cartoon;adventure;film;
現在,我只找到了使用CASE
獲得與您剛才提到的內容完全相同的輸出的方法,因此可以嘗試使用它:
SELECT
id,
keywords = (
CASE WHEN kw1 IS NOT NULL THEN kw1 + CASE WHEN COALESCE(kw2,kw3,kw4,kw5) IS NOT NULL THEN ';' ELSE '' END ELSE '' END +
CASE WHEN kw2 IS NOT NULL THEN kw2 + CASE WHEN COALESCE(kw3,kw4,kw5) IS NOT NULL THEN ';' ELSE '' END ELSE '' END +
CASE WHEN kw3 IS NOT NULL THEN kw3 + CASE WHEN COALESCE(kw4,kw5) IS NOT NULL THEN ';' ELSE '' END ELSE '' END +
CASE WHEN kw4 IS NOT NULL THEN kw4 + CASE WHEN kw5 IS NOT NULL THEN ';' ELSE '' END ELSE '' END +
CASE WHEN kw5 IS NOT NULL THEN kw5 ELSE '' END)
FROM @tbl
OUTPUT:
id keywords
-----------------------------------------
1 innocence;graphic novel;cartoon;comics
2 tattoos;comics
3 music;cartoon;adventure;film
您可以嘗試以下方法:
select ISNULL(kwa1,'') + ';' + ISNULL(kw2,'') from TABLENAME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.