当记录仅在其中一列(e 或 f)中有数据时,下面的查询有效。但是,如果记录在两列中都有数据,自然会导致 b 和 c 重复计数。那么,我该如何应对呢?
SELECT a.User1
, isnull(sum(b.Page_Count),0) AS Count1
, isnull(sum(c.Page_Count),0) AS Count2
, isnull(sum(d.Page_Count),0) AS Count3
, e.Material_Location
, f.Material_Location
From TaskUser AS a
LEFT JOIN PaperMaterial AS b
ON b.Assigned_To = a.User1
AND b.Date_Assigned between ('06/11/2014') AND ('06/12/2014')
LEFT JOIN PaperMaterial AS c
ON c.Assigned_To = a.User1
AND c.Date_Assigned between ('06/12/2014') AND ('06/13/2014')
LEFT JOIN PaperMaterial AS d
ON d.Assigned_To = a.User1
AND d.Date_Assigned between ('06/09/2014') AND ('06/14/2014')
LEFT JOIN PaperMaterial AS e
ON e.Assigned_To = a.User1
AND e.Date_Assigned between ('06/11/2014') AND ('06/12/2014')
LEFT JOIN PaperMaterial AS f
ON f.Assigned_To = a.User1
AND f.Date_Assigned between ('06/12/2014') AND ('06/13/2014')
GROUP BY a.User1, e.Material_Location, f.Material_Location
Order By a.User1, e.Material_Location, f.Material_Location
最佳答案
试着把 distinct 放在那里......看起来你是从左连接开始计算 double
SELECT a.User1
, isnull(sum(DISTINCT b.Page_Count),0) AS Count1
, isnull(sum(DISTINCT c.Page_Count),0) AS Count2
, isnull(sum(DISTINCT d.Page_Count),0) AS Count3
, e.Material_Location
, f.Material_Location
From TaskUser AS a
LEFT JOIN PaperMaterial AS b
ON b.Assigned_To = a.User1
AND b.Date_Assigned between ('06/11/2014') AND ('06/12/2014')
LEFT JOIN PaperMaterial AS c
ON c.Assigned_To = a.User1
AND c.Date_Assigned between ('06/12/2014') AND ('06/13/2014')
LEFT JOIN PaperMaterial AS d
ON d.Assigned_To = a.User1
AND d.Date_Assigned between ('06/09/2014') AND ('06/14/2014')
LEFT JOIN PaperMaterial AS e
ON e.Assigned_To = a.User1
AND e.Date_Assigned between ('06/11/2014') AND ('06/12/2014')
LEFT JOIN PaperMaterial AS f
ON f.Assigned_To = a.User1
AND f.Date_Assigned between ('06/12/2014') AND ('06/13/2014')
GROUP BY a.User1, e.Material_Location, f.Material_Location
Order By a.User1, e.Material_Location, f.Material_Location
关于mysql - 一行查询重复计算总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24187174/