【问题标题】:why this join on parent child tables results in wrong summarize?为什么这个父子表的连接会导致错误的汇总?
【发布时间】:2014-08-31 16:00:57
【问题描述】:

我很困惑编写这个查询来总结一些表字段的值。结果总结错误。对容易理解简化设计。 表格和字段如下:

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

怎么了???

【问题讨论】:

    标签: sql sql-server group-by inner-join olap-cube


    【解决方案1】:

    您正在沿不同维度进行聚合,并为每个“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;
    

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2015-05-15
      • 1970-01-01
      相关资源
      最近更新 更多