mysql - 一行查询重复计算总和

标签 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

最佳答案

试着把 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/

相关文章:

mysql - MySQL 命令中的双 ASC

c# - ExecuteReader() 后未更新输出参数

python - 使用 Jupyter Notebook 将 SQL 转换为 Pandas Dataframe

php - 检测目标写入字段,以便可以备份并可能恢复它们

php - Laravel如何通过积分获取当前用户位置

MYSQL程序将数据从一个表传输到另一个表

mysql - 几乎没有 JOIN 的 SQL

java - Android 与 JSON 的致命连接

python - 在 django 1.6 中使用多个数据库会出现 "can' t do subqueries”错误

sql - 查询选择查询的计数(*)但仅返回查询结果 OFFSET 的 LIMIT