我想从两个互不相关的表格中求和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
答案 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 子查询的上下文中使用的,该子查询最多可以返回一行。