在where中找不到记录时选择默认值

时间:2013-03-18 03:31:38

标签: sql-server sql-server-2008

给出以下查询:

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

如果没有根据where子句找到记录,如何返回默认值?以下是预期结果:

0, 0
1, 1
0, 0

请注意,当Id为零时,仍必须选择一个值。

1 个答案:

答案 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

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(没有真正明显的变化,但现在保证了顺序)