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'が乗算されます。結合を削除してもOKですが、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回乗算されます。
SUMにt2の結果を乗算しないようにするにはどうすればよいですか?あなたがで参加置き換えることができ
これは、ありがとうございます。一致する行が返されるのではなく、一致した場合にサブクエリから1が返されるため、これは機能しますか? – BattlFrog
ほぼ。 existsは、いずれかの行またはローが条件に一致する場合にtrueを返します。 –