如果月份相同,我面临一个问题,即将结果排在同一行。我在查询中使用UNION ALL。任何人都可以根据我的要求建议如何使用查询来获得结果。
我正在使用以下代码:
SELECT
SUM(amount) AS amount,
DATE_FORMAT(rcvdate,'%M %Y') as rcv,
NULL AS recovery
FROM `advertisercv`
GROUP BY DATE_FORMAT(rcvdate, '%M %Y')
UNION ALL
SELECT
NULL,
DATE_FORMAT(date,'%M %Y') AS rcv,
SUM(amount)
FROM `paymentsrec`
GROUP BY DATE_FORMAT(date, '%M %Y')
ORDER BY rcv
答案 0 :(得分:0)
你有
SELECT
SUM(amount) as amount,
DATE_FORMAT(rcvdate,'%M %Y') as rcv,
null as recovery
FROM `advertisercv`
GROUP BY DATE_FORMAT(rcvdate, '%M %Y')
UNION all
SELECT
null,
DATE_FORMAT(date,'%M %Y') as rcv,
SUM(amount)
FROM `paymentsrec`
GROUP BY DATE_FORMAT(date, '%M %Y')
order by rcv
为了使这更容易使用,我强烈建议为每个子选择赋予列相同的名称:
SELECT
SUM(amount) as amount,
DATE_FORMAT(rcvdate,'%M %Y') as rcv,
null as recovery
FROM `advertisercv`
GROUP BY DATE_FORMAT(rcvdate, '%M %Y')
UNION all
SELECT
null as amount,
DATE_FORMAT(date,'%M %Y') as rcv,
SUM(amount) as recovery
FROM `paymentsrec`
GROUP BY DATE_FORMAT(date, '%M %Y')
order by rcv
现在您可以看到您将获得包含amount,rcv,recovery的多行。您希望这些行按rcv分组:
SELECT * FROM (
SELECT
SUM(amount) as amount,
DATE_FORMAT(rcvdate,'%M %Y') as rcv,
null as recovery
FROM `advertisercv`
GROUP BY DATE_FORMAT(rcvdate, '%M %Y')
UNION all
SELECT
null as amount,
DATE_FORMAT(date,'%M %Y') as rcv,
SUM(amount) as recovery
FROM `paymentsrec`
GROUP BY DATE_FORMAT(date, '%M %Y')
order by rcv
) GROUP BY rcv
但是,*不是集团运营商。当我们有多个具有相同rcv的行时,我们该怎么办?你可以总结一下。你可以得到最大或最小。你表达问题的方式,看起来你想要合并 - 第一个非空值。
SELECT
rcv,
COALESCE(amount) as amount,
COALESCE(recover) as recovery
FROM (
SELECT
SUM(amount) as amount,
DATE_FORMAT(rcvdate,'%M %Y') as rcv,
null as recovery
FROM `advertisercv`
GROUP BY DATE_FORMAT(rcvdate, '%M %Y')
UNION all
SELECT
null as amount,
DATE_FORMAT(date,'%M %Y') as rcv,
SUM(amount) as recovery
FROM `paymentsrec`
GROUP BY DATE_FORMAT(date, '%M %Y')
order by rcv
) GROUP BY rcv
现在,每个rcv值将获得一行,并且金额和恢复将包含每个rcv值的第一个非空值。