2017-02-23 137 views
0

我有一個非常簡單的表。它有一個關鍵列和另外4列表示不同的數據類型。規則是這樣的:SQL Server 2008 R2 - 組合結果

  1. 每一行都有一個完整的鍵值
  2. 對於每一行其餘4列可能是所有空
  3. 對於每一行僅存的4列1將填充

我想要實現的是寫一個查詢,這將導致只有兩列(鍵和4的1)。基本上凝結4列ito之一。

的4列的數據類型如下:

nvarchar(255) 
numeric(32, 5) 
datetime 
nvarchar(MAX) 

源數據

╔═════╦═══════════╦══════╦════════════╦════════════════╗ 
║ key ║ col1 ║ col2 ║ col3 ║  col4  ║ 
╠═════╬═══════════╬══════╬════════════╬════════════════╣ 
║ 1 ║ some text ║ null ║ null  ║ null   ║ 
║ 2 ║ null  ║ 5 ║ null  ║ null   ║ 
║ 3 ║ null  ║ null ║ null  ║ null   ║ 
║ 4 ║ null  ║ null ║ 23/02/2017 ║ null   ║ 
║ 5 ║ null  ║ null ║ null  ║ much more text ║ 
╚═════╩═══════════╩══════╩════════════╩════════════════╝ 

理想輸出

╔═════╦════════════════╗ 
║ key ║  newCol  ║ 
╠═════╬════════════════╣ 
║ 1 ║ some text  ║ 
║ 2 ║ 5    ║ 
║ 3 ║ null   ║ 
║ 4 ║ 23/02/2017  ║ 
║ 5 ║ much more text ║ 
╚═════╩════════════════╝ 

任何幫助理解。

+1

樣本數據和期望的結果真的有幫助。你想要什麼樣的輸出?結果集中的列只有一種類型。 –

回答

1

您可以使用COALESCE這樣

select id, coalesce(cast(column1 as nvarchar(255)), cast(column2 as nvarchar(255)), cast(coulmn3 as nvarchar(255)), cast(column4 as nvarchar(255)) 
from ... 

如果他們都是NULL然後NULL將被退回。否則,如果我們保證只有四列中的一列NOT NULL那麼這一個將被退回。

+0

我相信這個答案會返回一個類型轉換錯誤。我明白答案,但不是讚揚。 –

+0

戈登是對的。我已經糾正了答案,但他應該是公認的答案。 –

2

coalesce()功能可以正常工作,但只有當你所有的值轉換爲字符串:

select id, 
     coalesce(col1, 
       cast(col1 as nvarchar(255)), 
       cast(col2 as nvarchar(255)), 
       cast(col3 as nvarchar(255)) 
       ) as col 
0

您應該使用ISNULL

select key, isnull(col1,col2,col3,col4) as newCol ...... 

使用COALESCE有時創建問題由於數據類型優先。由於COALESCE根據數據類型優先級確定輸出的類型。

查看下面的鏈接瞭解更多詳情。

Reference