ダッシュボードをコーディングしていて、Microsoft SQL Server からデータを引き出す必要があります。
簡単な例として、3 つのテーブル、1 つのマスター カテゴリ テーブル、およびプライマリ/外部キー関係 (青と緑の値テーブル) を介してカテゴリ テーブルにリンクされた値を含む 2 つのテーブルがあります。
Microsoft SQL Sever (t-sql) を使用して、2 つの値テーブルの値を、カテゴリ テーブルにある共通カテゴリでグループ化して合計 (合計) したいと考えています。
カテゴリー表
CategoryID (PK) | CategoryName
1 | Square
2 | Circle
ブルーテーブル
BlueID (PK) | CategoryID (FK) | BlueValue | BlueMonth | BlueYear
1 | 1 | 10 | 6 | 2012
2 | 1 | 20 | 12 | 2012
3 | 2 | 5 | 6 | 2012
4 | 2 | 9 | 12 | 2012
5 | 1 | 12 | 6 | 2013
6 | 1 | 21 | 12 | 2013
7 | 2 | 4 | 6 | 2013
8 | 2 | 8 | 12 | 2013
グリーンテーブル
GreenID (PK)| CategoryID (FK) | GreenValue| GreenMonth| GreenYear
1 | 1 | 3 | 6 | 2012
2 | 1 | 6 | 12 | 2012
3 | 2 | 2 | 6 | 2012
4 | 2 | 7 | 12 | 2012
5 | 1 | 2 | 6 | 2013
6 | 1 | 5 | 12 | 2013
7 | 2 | 4 | 6 | 2013
8 | 2 | 8 | 12 | 2013
次の SQL を使用すると、期待どおりの結果が得られます。
SELECT
[Category].[CategoryName],
SUM([Green].[GreenValue]) AS [GreenTotal]
FROM
[Category]
LEFT JOIN
[Green] ON [Category].[CategoryID] = [Green].[CategoryID]
GROUP BY
[Category].[CategoryName]
結果:
CategoryName | GreenTotal
Square | 16
Triangle | 21
ただし、Blue テーブルを追加して、BlueValue の合計も取得しようとすると、明らかに正しくない T-SQL によって予期しない結果が得られます。
SELECT
[Category].[CategoryName],
SUM([Green].[GreenValue]) AS [GreenTotal],
SUM([Blue].[BlueValue]) AS [BlueTotal]
FROM
[Category]
LEFT JOIN
[Green] ON [Category].[CategoryID] = [Green].[CategoryID]
LEFT JOIN
[Blue] ON [Category].[CategoryID] = [Blue].[CategoryID]
GROUP BY
[Category].[CategoryName]
不正確な結果:
CategoryName | GreenTotal | BlueTotal
Square | 64 | 252
Triangle | 84 | 104
結果はすべて、各カテゴリの各値テーブルの行の合計数である 4 倍になっているように見えます。
私は次の結果を見ることを目指しています。
CategoryName | GreenTotal | BlueTotal
Square | 16 | 63
Triangle | 21 | 26
誰かが私が間違っていることを教えてくれたら、私は大喜びしますか?
ありがとう、マーク。