MySQL-聚合来自两个表的信息
我正在努力将汇总的数据从一个表中带到一个已经有汇总数据的工作查询中 我试图比较加班和加班的小计 加班报价查询如下:MySQL-聚合来自两个表的信息,mysql,join,Mysql,Join,我正在努力将汇总的数据从一个表中带到一个已经有汇总数据的工作查询中 我试图比较加班和加班的小计 加班报价查询如下: SELECT workorder_entry.workorder_id AS 'Work Order #', DATE_FORMAT((internalinvoice.invoice_date), '%b %e %Y') AS 'Invoice Date', SUM(ROUND((workorder_entry.adjusted_hours)*(workor
SELECT
workorder_entry.workorder_id AS 'Work Order #',
DATE_FORMAT((internalinvoice.invoice_date), '%b %e %Y') AS 'Invoice Date',
SUM(ROUND((workorder_entry.adjusted_hours)*(workorder_entry.quantity),2)) AS 'Overtime Charged'
FROM workorder_entry
INNER JOIN service
INNER JOIN servicecategory
INNER JOIN internalinvoice
ON workorder_entry.service_id = service.ID
AND service.servicecategory_id = servicecategory.ID
AND internalinvoice.workorder_id = workorder_entry.workorder_id
WHERE internalinvoice.invoice_date > CAST('2015-06-01 00:00:01' AS DATE)
AND internalinvoice.invoice_date < CAST('2015-07-01 00:00:01' AS DATE)
AND (workorder_entry.adjusted_hours)*(workorder_entry.quantity) >0
AND servicecategory.ID <> 443
GROUP BY internalinvoice.workorder_id
ORDER BY internalinvoice.invoice_date ASC;
现在我想添加第四列,它是上面工作单上所有加班时间的总和。这些在jobcost_时间表_条目表中列出,如下所示(日期重复,因为可能有多人同时从事一项工作):
期望输出:
Work Order # | Invoice Date | Overtime Charged |Overtime Worked | Difference
37755 | Jun 2 2015 | 10.16 | 27.50 | -17.34
37754 | Jun 2 2015 | 18.00 | 0.00 | 18.00
37753 | Jun 2 2015 | 25.00 | 11.75 | 14.25
我试过几种不同的方法,没有一种与正确的信息非常接近。我怀疑答案可能是对第二组数据的子查询,但我在这一点上有点不知所措,这里的多次搜索并没有为这种情况提供很好的方向
我非常感谢任何帮助考虑将聚合groupby子查询添加为派生表(请参见
job\u ot\u total
)
考虑将聚合groupby子查询添加为派生表(请参见
job\u ot\u total
)
如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果你还没有这样做,那么提供一个与步骤1中提供的信息相对应的期望结果集。如果你愿意,考虑下面的简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。
workorder_id |Date Worked| overtime
37755 |May 15 2015| 9.50
37755 |May 16 2015| 0.00
37755 |May 17 2015| 12.25
37755 |May 17 2015| 0.00
37755 |May 17 2015| 1.75
37755 |May 18 2015| 4.00
37754 |May 20 2015| 0.00
37753 |May 29 2015| 10.25
37753 |May 30 2015| 1.50
Work Order # | Invoice Date | Overtime Charged |Overtime Worked | Difference
37755 | Jun 2 2015 | 10.16 | 27.50 | -17.34
37754 | Jun 2 2015 | 18.00 | 0.00 | 18.00
37753 | Jun 2 2015 | 25.00 | 11.75 | 14.25
SELECT
workorder_entry.workorder_id AS 'Work Order #',
DATE_FORMAT((internalinvoice.invoice_date), '%b %e %Y') AS 'Invoice Date'
SUM(ROUND((workorder_entry.adjusted_hours)*(workorder_entry.quantity),2)) AS 'Overtime Charged',
job_ot_total.SumOfOT AS 'Overtime Worked',
(SUM(ROUND((workorder_entry.adjusted_hours)*(workorder_entry.quantity),2)) -
job_ot_total.SumOfOT) AS 'Difference'
FROM workorder_entry
INNER JOIN service
INNER JOIN servicecategory
INNER JOIN internalinvoice
INNER JOIN (
SELECT j.workerorder_id, Sum(j.overtime) AS SumOfOT
FROM jobcost_timesheet_entry j
GROUP BY j.workerorder_id
) AS job_ot_total
ON workorder_entry.service_id = service.ID
AND service.servicecategory_id = servicecategory.ID
AND internalinvoice.workorder_id = workorder_entry.workorder_id
AND workorder_entry.workorder_id = job_ot_total.workerorder_id
WHERE internalinvoice.invoice_date > CAST('2015-06-01 00:00:01' AS DATE)
AND internalinvoice.invoice_date < CAST('2015-07-01 00:00:01' AS DATE)
AND (workorder_entry.adjusted_hours)*(workorder_entry.quantity) >0
AND servicecategory.ID <> 443
GROUP BY internalinvoice.workorder_id
ORDER BY internalinvoice.invoice_date ASC;
SELECT j.workerorder_id, Sum(j.overtime) AS SumOfOT
FROM jobcost_timesheet_entry j
GROUP BY j.workerorder_id