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 に答える