一行查询重复计算总和

时间:2014-06-12 14:37:21

标签: mysql sql

当记录中只有一列(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

1 个答案:

答案 0 :(得分:0)

尝试把那里的东西区别开来......好像你从左连接中计算了两倍

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