给定以下查询:
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM TABLE
WHERE Id IN (0, 2, 0);
当基于 where 子句找不到记录时,如何返回默认值?以下是预期的结果:
0, 0
1, 1
0, 0
请注意,当 Id 为零时,仍必须选择一个值。
给定以下查询:
SELECT COALESCE(A, 0), COALESCE(B, 0)
FROM TABLE
WHERE Id IN (0, 2, 0);
当基于 where 子句找不到记录时,如何返回默认值?以下是预期的结果:
0, 0
1, 1
0, 0
请注意,当 Id 为零时,仍必须选择一个值。
从VALUES 派生表中选择并加入您的表:
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 示例(没有真正可见的更改,但现在可以保证排序)