如何按状态对两个不相关的表中的值求和

时间:2019-03-07 20:39:30

标签: sql sql-server

我想从两个互不相关的表格中求和17岁以下的人数。第一个表具有一组状态,第二个表具有另一组不同的状态。我想列出所有年龄在17岁以下的州。这是我的代码,但我不断收到错误消息

SELECT 
   (
    SELECT SUM(PerpAge17) AS [Age 17 or Younger]
    FROM NamrsFrozen2017.CaseKeyIndicator2017
    Where FiscalYear = 2017
    GROUP BY StateName
    ) +
    (
    SELECT SUM(PerpAge17) AS [Age 17 or Younger]
    FROM NamrsFrozen2017.KeyIndicator2017
    Where FiscalYear = 2017
    GROUP BY StateName

1 个答案:

答案 0 :(得分:2)

鉴于表可能没有确切的状态,可以使用full join或两个聚合。

所以:

SELECT COALESCE(c.StateName, k.StateName) as StateName,
       c.[Age 17 or Younger], k.[Age 17 or Younger]
       (COALESCE(c.[Age 17 or Younger], 0) + COALESCE(k.[Age 17 or Younger], 0)) as [Age 17 or Younger]
FROM (SELECT StateName, SUM(PerpAge17) AS [Age 17 or Younger]
      FROM NamrsFrozen2017.CaseKeyIndicator2017
      WHERE FiscalYear = 2017
      GROUP BY StateName
     ) c FULL JOIN
     (SELECT StateName, SUM(PerpAge17) AS [Age 17 or Younger]
      FROM NamrsFrozen2017.KeyIndicator2017
      WHERE FiscalYear = 2017
      GROUP BY StateName
     ) k
     ON c.StateName = k.StateName;

请注意,您的查询无法正常工作,因为子查询返回了多行(每个状态一个)。但是,它们是在 scalar 子查询的上下文中使用的,该子查询最多可以返回一行。

相关问题