Sql 为什么父子表上的这种连接会导致错误的汇总?
我在写这个查询来汇总一些表字段的值时感到困惑。结果摘要是错误的。我简化了设计以便于理解。 表和字段如下所示:Sql 为什么父子表上的这种连接会导致错误的汇总?,sql,sql-server,group-by,inner-join,olap-cube,Sql,Sql Server,Group By,Inner Join,Olap Cube,我在写这个查询来汇总一些表字段的值时感到困惑。结果摘要是错误的。我简化了设计以便于理解。 表和字段如下所示: Table [City] => {ID, CityName} Table [A] => {ID, CityID, Date, Value} Table [B_1] => {ID, AID, Value} Table [B_2] => {ID, AID, Value} 如您所见,[city]的表是[A]的父表,[A]是[B_1]和[B_2]的父表 以下是
Table [City] => {ID, CityName}
Table [A] => {ID, CityID, Date, Value}
Table [B_1] => {ID, AID, Value}
Table [B_2] => {ID, AID, Value}
如您所见,[city]的表是[A]的父表,[A]是[B_1]和[B_2]的父表
以下是查询:
SELECT City.CityName, A.Date, SUM(A.Value), SUM(B_1.Value), SUM(B_2.Value)
FROM A INNER JOIN
B_1 ON A.ID = B_1.AID INNER JOIN
B_2 ON A.ID = B_2.AID INNER JOIN
City ON A.CityID = City.ID
GROUP BY City.CityName, A.Date
假设我们有这些值:
Data for Table [City] =>
ID CityName
-- --------
1 LA
2 NYC
Data for Table [A] =>
ID CityID Date Value
-- ------ ---- -----
1 1 2014 8
2 1 2014 5
3 2 2014 3
Data for Table [B_1] =>
ID AID Value
-- --- -----
1 1 3
2 1 6
3 2 7
4 2 2
Data for Table [B_2] =>
ID AID Value
-- --- -----
1 1 8
2 1 5
3 2 3
4 2 1
我正在努力实现这一结果:
CityName Date AValue B1Value B2Value
-------- ---- ------ ------- -------
LA 2014 13 18 17
但结果是:
CityName Date AValue B1Value B2Value
-------- ---- ------ ------- -------
LA 2014 52 36 34
有什么问题吗?您正在沿不同维度进行聚合,并得到每个“a”的叉积。您可以通过预聚合结果来解决此问题:
SELECT City.CityName, A.Date, SUM(A.Value), SUM(BVALUE1), SUM(BVALUE2)
FROM A INNER JOIN
(SELECT AID, SUM(VALUE) as BVALUE1
FROM B_1
GROUP BY AID
) B_1
ON A.ID = B_1.AID INNER JOIN
(SELECT AID, SUM(VALUE) as BVALUE2
FROM B_2
GROUP BY AID
) B_2
ON A.ID = B_2.AID INNER JOIN
City
ON A.CityID = City.ID
GROUP BY City.CityName, A.Date;