Sql 如何按状态分组求两个不相关表的值之和

Sql 如何按状态分组求两个不相关表的值之和,sql,sql-server,Sql,Sql Server,我想把两个不同的表中年龄在17岁或17岁以下的人数相加。第一个表有一组状态,第二个表有另一组不同的状态。我想要一份17岁或17岁以下的所有州的名单。这是我的代码,但我一直收到一个错误 SELECT ( SELECT SUM(PerpAge17) AS [Age 17 or Younger] FROM NamrsFrozen2017.CaseKeyIndicator2017 Where FiscalYear = 2017 GROUP BY StateName

我想把两个不同的表中年龄在17岁或17岁以下的人数相加。第一个表有一组状态,第二个表有另一组不同的状态。我想要一份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

考虑到表可能没有确切的状态,可以使用完全联接或两个聚合

因此:


请注意,您的查询不起作用,因为子查询返回多行,每个状态一行。但是,它们在标量子查询的上下文中使用,标量子查询最多只能返回一行。

鉴于表可能没有确切的状态,您可以使用完全联接或两个聚合

因此:


请注意,您的查询不起作用,因为子查询返回多行,每个状态一行。但是,它们被用于标量子查询的上下文中,该子查询最多只能返回一行。

示例数据和所需结果将非常有帮助。对错误的解释也是如此。样本数据和期望的结果将真正有助于。对错误的解释也是如此。是的,但我会在第二行使用+而不是,。无论如何,向上投票。如果我想添加另一个包含所有州名称的表。我该怎么做呢。感谢您的帮助@GordonLinoff@G.Aurelien . . . 该表将首先在FROM子句中,然后使用左连接而不是全连接。一些合并也会消失。从NamrsFullDw.UsState Left Join SELECT StateName,SUMPerpAge17为[17岁或以下]从NamrsFrozen2017.CaseKeyIndicator2017,其中FiscalYear=2017 GROUP BY StateName c FULL Outer Join SELECT StateName,SUMPerpAge17为[17岁或以下]从NamrsFrozen2017.KeyIndicator2017,其中FiscalYear=2017 GROUP BY StateName kLike this@GordonLinoff我一直收到一个错误请记住,第三个表只有状态名称Yep,但我会在第二行使用+而不是,。无论如何,向上投票。如果我想添加另一个包含所有州名称的表。我该怎么做呢。感谢您的帮助@GordonLinoff@G.Aurelien . . . 该表将首先在FROM子句中,然后使用左连接而不是全连接。一些合并也会消失。从NamrsFullDw.UsState Left Join SELECT StateName,SUMPerpAge17为[17岁或以下]从NamrsFrozen2017.CaseKeyIndicator2017,其中FiscalYear=2017 GROUP BY StateName c FULL Outer Join SELECT StateName,SUMPerpAge17为[17岁或以下]来自NamrsFrozen2017.KeyIndicator2017,其中FiscalYear=2017按州名分组K类似于此@GordonLinoff,我一直收到一个错误请记住第三个表中只有州名
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;