次のようなフィールドを持つテーブルがあります。
Item
Category
Year
Month
Value
このテーブルの結果を集計して、カテゴリ、年、月ごとの合計(値)を表示したいと思います。だから私はこのクエリを持っています:
SELECT Category, Year, Month, SUM(Value)
FROM Table
GROUP BY Category, Year, Month;
これは正常に機能しますが、合計がゼロの月については、その月は表示されません。該当する場合は、すべての月の合計値をゼロで表示したいと思います。
やってみましCOALESCE(SUM(Value),0)
たが、うまくいきませんでした。
年と月の値を使用して別のテーブル(Table2)を作成し、これを最初のテーブルと結合してみました。
SELECT Category, Year, Month, SUM(Value)
FROM Table
RIGHT JOIN Table2
ON Table2.Year + Table2.Month = Table.Year + Table.Month
GROUP BY Category, Year, Month;
これも機能しません。私は何が間違っているのですか?
編集:
次のクエリを使用して、Demsのソリューションを試しました。
SELECT
Category.name,
Dates.Year,
Dates.Month,
SUM(Data.Value) AS Value
FROM
Category
CROSS JOIN
Dates
LEFT JOIN
Data
ON data.CategoryID = Category.ID
AND data.Year = Dates.Year
AND data.Month = Dates.Month
WHERE data.Year BETWEEN #### and ####
AND data.Month BETWEEN # AND #
AND data.Property IN (‘A1’,’B1’)
AND data.Property2 IN (‘C1’,’D1’)
GROUP BY
Category.name,
Dates.Year,
Dates.Month
見ることができる限りの唯一の違いは、データにwhere句を使用していて、ORDER BYを見逃していることです。これは、違いを生むべきではありません。しかし、私はまだ喜びを持っていません。