[英]SQL Server 2008 R2 - Combine results
我有一張非常簡單的桌子。 它具有一個鍵列和另外4個列,每個列表示不同的數據類型。 規則是這樣的:
我要實現的目標是編寫一個查詢,該查詢將僅導致兩列(鍵和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.