我正在编写仪表板,我需要从 Microsoft SQL Server 中提取一些数据。
举个简单的例子,我有三个表,一个主类别表,两个表包含通过主/外键关系链接到类别表的值(蓝色和绿色值表)。
使用 Microsoft SQL Sever (t-sql),我希望合计(求和)两个值表中的值,按类别表中的常见类别分组。
类别表
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
如果有人能告诉我到底做错了什么,我会欣喜若狂?
谢谢,马克。