次のクエリがあるとします。
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の例 (実際に目に見える変更はありませんが、順序は保証されています)