我希望在MYSQL中可以实现这一点,我用PHP编写脚本。
我正在尝试根据个别条件和分组,基于每个月在table1上创建多个值和COUNT的COUNT。这些表已经通过accountid加入。 我有两个月报表(table1)&花盆(表2)。
所需结果见表1
每月报告(表1)
REPORTID|ACCOUNTID|COMPMONTH|SUMtoDATE|COUNTtoDATE|SUMcompDATE|COUNTcompDATE|
1 | 190 | JAN | 150 | 2 | 150 | 2 |
2 | 190 | FEB | 0 | 0 | 100 | 1 |
种植者(表2)
PlanterID | ACCOUNTID |PLANTER | SALARY | compDATE | toDATE |
1 | 190 | aaa | 100 | Jan-1-2013 | Jan-05-2013 |
2 | 190 | bbb | 50 | Jan-9-2013 | Jan-12-2013 |
3 | 190 | aaa | 100 | Feb-1-2013 | Mar-12-2013 |
4 | 190 | bbb | 0 | Mar-5-2013 | Mar-12-2013 |
使用内连接的单个查询已经可以正常工作,但是如果我同时运行这两个查询,我什么也得不到,因为如果可能的话,我似乎无法获得逻辑。
这是我到目前为止从stackoverflow到但是得到错误。 希望有人可以重构它或使其有效。
SELECT *,
(
SELECT COUNT(planters.todate), SUM(planters.todate)
FROM monthlyreport
INNER JOIN planters ON monthlyreport.accountid = planters.accountid
WHERE monthlyreport.accountid = 190 AND MONTH(monthlyreport.compmonth) = MONTH(planters.todate)
GROUP BY monthlyreport.mthreportid, month(planters.todate)
) AS count_1,
(
SELECT COUNT(planters.compdate), SUM(planters.compdate)
FROM monthlyreport
INNER JOIN planters ON monthlyreport.accountid = planters.accountid
WHERE monthlyreport.accountid = 190 AND MONTH(monthlyreport.compmonth) = MONTH(planters.compdate)
GROUP BY monthlyreport.mthreportid, month(planters.compdate)
) AS count_2
答案 0 :(得分:0)
它不是很清楚,但据我所知,你想要的是将两个结果放在一个查询结果中。尝试根据两个表中的accountID加入它们.AS:
SELECT *
from
(select accountID,COUNT(planters.todate) as count2date, SUM(planters.todate) as sum2date
-----
-----) count_1
inner join
(SELECT accountID,COUNT(planters.compdate) as countcomp, SUM(planters.compdate) as sumcomp
-----
-----) count_2
using(accountID);
请勿在count_1或count_2之前使用“AS”。最好在外部选择查询中使用更具体的属性替换*,例如count_1.count2date或类似。
希望这有帮助!如果您正在寻找其他任何东西,请告诉我。
- - - - - - - - UPDATE
在查看您上传的文件后,我想出了以下查询:
SELECT count1.compmonth, IFNULL( todatecount, 0 ) , IFNULL( todatesum, 0 ) , IFNULL( compdatecount, 0 ) , IFNULL( compdatesum, 0 )
FROM count_1
LEFT JOIN count_2 ON count_1.compmonth = count_2.compmonth
UNION
SELECT count2.compmonth, IFNULL( todatecount, 0 ) , IFNULL( todatesum, 0 ) , IFNULL( compdatecount, 0 ) , IFNULL( compdatesum, 0 )
FROM count_1
RIGHT JOIN count_2 ON count_1.compmonth = count_2.compmonth
您可以根据自己的意愿格式化0。此外,如果您的数据库平台支持“FULL OUTER JOIN”,您可以使用它而不是建立左右连接的联合。
您必须将“FROM count_1”替换为:
FROM (select accountID,COUNT(planters.todate) as count2date, SUM(planters.todate) as sum2date
-----
-----) count_1
同样适用于FROM count_2
。我知道这看起来像一个巨大的查询,但所有这一切都是在公共日期加入2个表,而所有其他不匹配的字段都被指定为NULL。