我正在做一份捐款报告,我有两张桌子和一张桌子。 我希望年复一年得到他们的总和。
tbldonation:
amount | received
100 : 2016-01-02 08:42:20
100 : 2015-12-01 09:20:00
tblpubdonation:
amount | received
100 : 2015-12-22 09:20:00
我的查询是:
SELECT * from
(
(SELECT YEAR(received) as YY, sum(amount) as AMT FROM tbldonation)
UNION ALL
(SELECT YEAR(received) as YY, sum(amount) as AMT FROM tblpubdonation)
) results
WHERE results.YY <= Curdate()
GROUP BY results.YY
ORDER BY results.YY DESC
我得到的结果却不准确。 它应该是
YY | AMT
2016 : 100
2015 : 200
但我的结果是:
YY | AMT
2016 : 200
2015 : 100
价值是错误的。
答案 0 :(得分:0)
您在查询中使用总和(金额)。因此,在tbldonation中,总和变为。在pbldonationsum(金额)= 100.最后,订单以年为单位。所以2016年最初是2015年,最后是2015年。 2015年将不会获得金额值200,因为使用了联盟运营商并且两者都有2015年的普遍。因此,这是根据我自己的数据本身或者一些数据故障。如果我错了,请建议我也这样我可以改善自己。 谢谢。 此致,Raju。
答案 1 :(得分:0)
尝试以下MySql(自MySQL
lacks support for FULL JOIN
以来。我们必须模拟它)
SELECT Yr , SUM(amountSum)
FROM ( SELECT SUM(ISNULL(t1.amount, 0)) AS amountSum ,
t1.year AS Yr
FROM tbldonation t1
GROUP BY t1.YEAR
UNION ALL
SELECT SUM(ISNULL(t2.amount, 0)) AS amountSum ,
t2.year AS Yr
FROM tblpubdonation t2
GROUP BY t2.YEAR
) Tbl
GROUP BY Tbl.Yr
以下适用于T-SQL
SELECT SUM (ISNULL(t1.amount,0)) + SUM(ISNULL(t2.amount,0)), ISNULL(t1.YEAR,t2.YEAR)
FROM dbo.tbldonation t1
FULL OUTER JOIN dbo.tblpubdonation t2 ON t1.YEAR = t2.YEAR
GROUP BY t1.YEAR, t2.YEAR