Sql 如何按状态分组求两个不相关表的值之和
我想把两个不同的表中年龄在17岁或17岁以下的人数相加。第一个表有一组状态,第二个表有另一组不同的状态。我想要一份17岁或17岁以下的所有州的名单。这是我的代码,但我一直收到一个错误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
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;