1

给定以下查询:

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

当基于 where 子句找不到记录时,如何返回默认值?以下是预期的结果:

0, 0
1, 1
0, 0

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

4

1 回答 1

2

VALUES 派生表中选择并加入您的表:

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

SQL 小提琴示例


如果必须维护返回的订单,您可以显式指定它:

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 示例(没有真正可见的更改,但现在可以保证排序)

于 2013-03-18T03:38:49.553 回答