2013-03-18 38 views
1

考慮以下查詢:選擇默認值時,在沒有找到記錄下

SELECT COALESCE(A, 0), COALESCE(B, 0) 
FROM TABLE 
WHERE Id IN (0, 2, 0); 

它是如何將有可能在沒有記錄的基礎上發現的where子句返回默認值?以下是預期結果:

0, 0 
1, 1 
0, 0 

請注意,當Id爲零時,仍然必須選擇一個值。

回答

2

VALUES derived table選擇並加入你的桌子上:

SELECT COALESCE(A, 0), COALESCE(B, 0) 
FROM (VALUES (0),(2),(0)) x(Id) 
LEFT OUTER JOIN [TABLE] ON [TABLE].Id = x.Id 

SQL Fiddle example


如果返回的順序必須保持,你可以明確指定:

SELECT COALESCE(A, 0), COALESCE(B, 0) 
FROM (VALUES (0,0),(1,2),(2,0)) x(SeqNo, Id) 
LEFT OUTER JOIN [TABLE] ON [TABLE].Id = x.Id 
ORDER BY SeqNo 

SQL Fiddle example(沒有真正的可見變化,但排序現在爲g保證)