簡體   English   中英

SQL Server 2008 R2-合並結果

[英]SQL Server 2008 R2 - Combine results

我有一張非常簡單的桌子。 它具有一個鍵列和另外4個列,每個列表示不同的數據類型。 規則是這樣的:

  1. 每行都有一個完整的鍵值
  2. 對於每一行,其余4列可能都為空
    要么
  3. 對於每一行,僅填充剩余的4列中的1列

我要實現的目標是編寫一個查詢,該查詢將僅導致兩列(鍵和4中的1)。 本質上將4列濃縮為1列。

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 ║
╚═════╩════════════════╝

任何幫助表示贊賞。

僅當您將所有值都轉換為字符串時, coalesce()函數才能工作:

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

您可以像這樣使用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之一,則將返回這一列。

您應該使用isull

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

有時由於數據類型優先級的原因,使用COALESCE可能會產生問題。 由於COALESCE根據數據類型優先級確定輸出的類型。

檢查以下鏈接以獲取更多詳細信息。

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM