2

次のようなフィールドを持つテーブルがあります。

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を見逃していることです。これは、違いを生むべきではありません。しかし、私はまだ喜びを持っていません。

4

3 に答える 3

2

カテゴリをに追加するTable2か、(さらに良い)テーブルを作成する必要がありCategoryます。

次に、データテーブルではなく、これらのルックアップテーブルでグループ化する必要があります。

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
    AND data.Property  IN ('A1','B1') 
    AND data.Property2 IN ('C1','D1')
WHERE Dates.Year  BETWEEN #### AND ####
  AND Dates.Month BETWEEN #### AND ####
GROUP BY
  Category.name,
  Dates.Year,
  Dates.Month
ORDER BY
  Category.name,
  Dates.Year,
  Dates.Month
于 2012-10-31T11:50:19.287 に答える
0

ステートメントに年と月を追加する代わりに、月と年の条件を個別に確認してください。このようにONTable2.Year=Table.YearおよびTable2.Month=Table.Month

于 2012-10-31T11:52:19.130 に答える
0
SELECT Table.Category, Table.Year, Table.Month, SUM(Table.Value) 
FROM Table
right outer  JOIN Table2
ON Table2.Year= Table.Year and Table2.Month =Table.Month
GROUP BY Table.Category,Table2.Year, Table2.Month;
于 2012-10-31T11:45:46.260 に答える