2017-03-29 21 views
0

這是我的數據如何多張列將結合「 - 」和刪除「 - 」有值爲NULL

col1 col2 col col3 col4 col5 col6 
42  A  11 18  89  16  empty 
42  B  12 empty 89  14  C 
36  8  9 empty empty 2  empty 

這是腳本我跑

select col1 + COALESCE ([col2]+'-','') 
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','') 
+COALESCE([col5]+'-','')+COALESCE([col6],'') as totalCol 
FROM ... 

這是什麼我得到

totalCol 
42A-11-18-89-16- 
42B-12- -89-14-C 
368-9- - -2 - 

這就是我想要的

totalCol 
42A-11-18-89-16 
42B-12-89-14-C 
368-9-2 
+0

當你寫在你的樣本數據「空」,你的意思是NULL或你的意思是「空」字符串'「」'? –

+0

那麼,你不想在'col1'和'col2'之間劃一條短線?而且你的數據有一個'col',它在你的查詢中沒有使用。所以,你的查詢不能創建'這是我得到'數據...請澄清。 –

+0

對第1列和第2列沒有破折號,基本上我把6列組合成一列,在第一列和第二列旁邊有破折號。如果其中任何一列有空值,我不希望破折號像 – john

回答

1

運行一個替代的「 - 」到「」後,你的腳本

你也必須記住,空白和空白是兩回事。

更新腳本

select ltrim(rtrim(replace(replace(
col1 + COALESCE ([col2]+'-','') 
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','') 
+COALESCE([col5]+'-','')+COALESCE([col6],'') + ' ','--','-'), 
'- ',''))) 
as totalCol 
FROM ... 

或假定只有空白,而不是空值

select ltrim(rtrim(replace(
[col1] + [col2]+'-' + [col3]+'-' + [col4]+'-' + [col5]+'-' + [col6] + ' ' 
'- ',''))) 
as totalCol 
FROM ... 
+0

上面的例子那樣顯示真棒這工作的第二行,但第一行和第三行我仍然得到一個額外的 - 在最後。但不在中間。 – john

+0

回覆之前的電子郵件。數據是空的字符串不爲空 – john

+0

當然..這兩個腳本將工作。 – maSTAShuFu

0

假設你已經做作的數據來說明問題(因爲你有你的數據col,但不要」在您的查詢中使用col),您可以輕鬆地以此方式進行操作。在所有非空數據之後添加破折號(-)。然後,我們將除最後一個字符以外的所有字符(因爲它總是一個短劃線)。

我還添加了更多代碼來創建數據,以便您可以複製/運行整個查詢並查看它的工作原理。

declare @tbl table (
    col1 varchar(10) null, 
    col2 varchar(10) null, 
    col3 varchar(10) null, 
    col4 varchar(10) null, 
    col5 varchar(10) null, 
    col6 varchar(10) null, 
    col7 varchar(10) null 
) 

insert into @tbl values 
('42', 'A', '11', '18', '89', '16', null), 
('42', 'B', '12', null, '89', '14', 'C'), 
('36', '8', '9', null, null, '2', null) 

select left(x.concat_val, len(x.concat_val) - 1) as totalCol 
from (
     select isnull(col1 + '-', '') + 
       isnull(col2 + '-', '') + 
       isnull(col3 + '-', '') + 
       isnull(col4 + '-', '') + 
       isnull(col5 + '-', '') + 
       isnull(col6 + '-', '') + 
       isnull(col7 + '-', '') as concat_val 
     from @tbl 
    ) as x 

下面是返回的數據:

totalCol 
----------------------------------------------------------------------------- 
42-A-11-18-89-16 
42-B-12-89-14-C 
36-8-9-2 
+0

這是別人是我不想改變數據類型的數據。我想要這樣做。 col名稱只是一個例子。不是真正的專欄名稱。 – john