给出以下查询:
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM TABLE
WHERE Id IN (0, 2, 0);
如果没有根据where子句找到记录,如何返回默认值?以下是预期结果:
0, 0
1, 1
0, 0
请注意,当Id为零时,仍必须选择一个值。
答案 0 :(得分: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
如果必须维护退回的订单,您可以明确指定它:
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(没有真正明显的变化,但现在保证了顺序)