0
TABLE1 - RegId (int) pk, RegDate (date), CityId, Tons1(int), Tons2(int)
TABLE2 - RegId(int) fk, OtherDate (date)
TABLE3 - id, City
SELECT c.City
, SUM(t1.Tons1 + t1.Tons2) as 'TotalTons'
FROM Table1 t1
JOIN Table2 t2 ON t1.RegId = t2.RegId
JOIN table3 c ON t1.CityId = c.Id
WHERE YEAR(t2.OtherDate) = '2016'
GROUP BY c.City
如果表2中存在多个匹配项,则'TotalTons'将被重复。如果我删除了连接,那就没关系,但我必须为WHERE子句创建table2日期。从多个子表返回的虚总数SUM总计
样品:
TABLE1
(20, '2016-2-2', 3, 2, 3)
(21, '2016-4-12', 7, 3, 5)
(22, '2016-4-12', 7, 6, 3)
TABLE 2
(20, '2016-2-2')
(20, '2016-2-3')
(20, '2016-2-5')
(20, '2016-2-1')
(21, '2016-5-12')
(22, '2016-9-2')
TABLE 3
(3, 'Dallas')
(7, 'Kansas')
成绩
City TotalTons
---- ---------
Dallas 20 (should be 5)
Kansas 17 (Correct)
所以达拉斯总吨为5,但因为有表2中5个不同的行为的RegID 20,它乘以4倍。
如何让它停止乘以t2结果的SUM?
这工作,谢谢。因此,这是否是因为不是返回匹配的行而只是在匹配时从子查询中返回1? – BattlFrog
差不多。如果任何行或条状图符合条件,则存在返回true。 –