2014-06-12 127 views
1

下面的查询工作时,只记录在一列有数据(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 
+0

让你的计数DISTINCT计数双 –

+0

哇东西这么白痴简单。谢谢。当然是 – You

+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