2016-01-11 4 views
1

Я делаю пожертвование, у меня есть две таблицы tbldonation и tblpubdonation Я хочу получить свою группу по годам.Получить сумму из двух таблиц ГРУППА по дате в году

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

Try следуя за 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 
+0

это не работает, сэр. –

+0

@SeeMore okey, что вы получаете? – tchelidze

+0

Неверный счетчик параметров в вызове функции native «ISNULL» , а также что такое ПОЛНАЯ ВНЕШНЯЯ СОЕДИНЕННОСТЬ? t1.YEAR не будет равно t2.YEAR Я думаю. –

0

Вы используете сумму в запросе. Таким образом, сумма будет равна. В pbldonationsum (amount) = 100. В конце порядок задается годами. Так что 2016 год - это сначала и 2015 год в конце . 2015 год не получит значение 200, потому что используется оператор union, и оба из них имеют общий доступ к 2015 году. Таким образом, это должно быть зафиксировано в самих данных, как и у меня, или же сбой в данных. Если я ошибаюсь, предложите мне также, чтобы Я могу улучшить себя. Спасибо. С уважением, Раджу.