SQL Server で以下のようなテーブルでSQLを書いています。
テーブル
ID | Good | Bad | ユーザーID
1 | 1 | 0 | A
2 | 0 | 1 | A
3 | 1 | 0 | B
5 | 1 | 0 | A
SELECT SUM(評価.Good) AS Good,SUM(評価.Bad) AS Bad,SUM(評価計.Good計) AS Good計,SUM(評価計.Bad計) AS Bad計
FROM 評価
LEFT JOIN
(
SELECT SUM(Good) AS Good計,SUM(Bad) AS Bad計,ユーザーID
FROM 評価
WHERE ユーザーID = 'A' GROUP BY ユーザーID
) AS 評価計
ON 評価.ユーザーID = 評価計.ユーザーID
WHERE 評価.ID = 4
GROUP BY ID
欲しいデータ(レコード)は
Good | Bad | Good計 | Bad計
0 ,0,2,1
です。
ですが、ID4のレコードが無いため、1行も返ってきません。
ISNULLやCASE文をを入れたり、SELECT先頭にCOUNT(*)を入れてみたりしたのですが、根本的に元データにID4のレコードが無いため、1行も返ってきません。
欲しいデータ(レコード)が返ってくるためには、どのようにSQLを記述すればよいのでしょか?
(元データには、ユーザーID 「A」のレコードが1件も無い場合もあります。
よろしくお願いします。
追記
DECLARE @Good int ,@Bad int,@Good計 int ,@Bad計 int
SELECT @Good = SUM(Good),@Bad = SUM(Bad)
FROM 評価
WHERE ID = 4
GROUP BY ID
SELECT @Good計 = SUM(Good),@Bad計 = SUM(Bad)
FROM 評価
WHERE ユーザーID = 'A'
GROUP BY ユーザーID
SELECT ISNULL(@Good,0),ISNULL(@Bad,0),ISNULL(@Good計,0),@ISNULL(@Bad計,0)
こうすれば欲しいデータが得られるには得られるのですが、一つのSQLで実行したいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー