2014-09-20 3 views
0

Сценарий: у меня есть 2 таблицы форм запроса 2, просто хочу просмотреть оба результата запроса как результат одного запроса.Как получить результат из 2 разных таблиц?

Детали:

Таблица: loantrans

+-----+----------+---------+---------+---------+ 
| tid | date | account | purpose | out | 
+-----+----------+---------+---------+---------+ 
| 1 |2014-08-12| 975 | Loan | 5000 | 
| 2 |2014-08-12| 975 |Interest | 850 | 
| 3 |2014-08-12| 975 | Loan | 150 | 
| 4 |2014-08-12| 975 |Interest | 5000 | 
+-----+----------+---------+---------+---------+ 

Таблица: fdrtrans

+-----+----------+---------+---------+---------+ 
| tid | date | account | purpose | out | 
+-----+----------+---------+---------+---------+ 
| 1 |2014-08-12| 975 | FDR | 5000 | 
| 2 |2014-08-12| 975 |Interest | 850 | 
| 3 |2014-08-12| 975 | FDR | 150 | 
| 4 |2014-08-12| 975 | Deposit | 5000 | 
+-----+----------+---------+---------+---------+ 

Запрос 1:

SELECT MONTH(`loantrans`.`date`) as month, SUM(`loantrans`.`out`) AS loanout 
      FROM loantrans 
      WHERE (`loantrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20') 
      AND (`loantrans`.`purpose` = 'Loan') 
      GROUP BY MONTH(`loantrans`.`date`) 
      ORDER BY `loantrans`.`date` 

Результат:

+-------+---------+ 
| month | loanout | 
+-------+---------+ 
| 1 | 28000 | 
| 2 | 27000 | 
| 3 | 10200 | 
| 4 | 7000 | 
| 5 | 95000 | 
| 6 | 2000 | 
+-------+---------+ 

Запрос 2:

SELECT MONTH(`fdrtrans`.`date`) as month, SUM(`fdrtrans`.`in`) AS fdr 
      FROM fdrtrans 
      WHERE (`fdrtrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20') 
      AND (`fdrtrans`.`purpose` = 'FDR') 
      GROUP BY MONTH(`fdrtrans`.`date`) 
      ORDER BY `fdrtrans`.`date` 

Результат:

+-------+---------+ 
| month | fdr | 
+-------+---------+ 
| 1 | 2000 | 
| 2 | 750 | 
| 3 | 200 | 
| 4 | 180 | 
| 5 | 570 | 
| 6 | 625 | 
+-------+---------+ 

То, что я хочу, как

+-------+---------+---------+ 
| month | fdr | loanout | 
+-------+---------+---------+ 
| 1 | 2000 | 28000 | 
| 2 | 750 | 27000 | 
| 3 | 200 | 10200 | 
| 4 | 180 | 7000 | 
| 5 | 570 | 95000 | 
| 6 | 625 | 2000 | 
+-------+---------+---------+ 

Как получить результат, как это ???

Пожалуйста, проверьте этот скриншот для более четкого представления о том, что я ищу https://www.dropbox.com/s/kn8z7z4v7sbahf0/Capture4.PNG?dl=0 База данных: https://www.dropbox.com/s/8gbgrgvil915efr/bankdb.sql_7.zip?dl=0

ответ

1

Вы можете просто присоединиться два запроса. Использование WITH не требуется, но это значительно улучшает читаемость вашего запроса для таких случаев.

WITH q2 AS 
(SELECT MONTH(`fdrtrans`.`date`) as month, SUM(`fdrtrans`.`in`) AS fdr 
      FROM fdrtrans 
      WHERE (`fdrtrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20') 
      AND (`fdrtrans`.`purpose` = 'FDR') 
      GROUP BY MONTH(`fdrtrans`.`date`) 
      ORDER BY `fdrtrans`.`date`) 
, q1 AS 
(SELECT MONTH(`loantrans`.`date`) as month, SUM(`loantrans`.`out`) AS loanout 
      FROM loantrans 
      WHERE (`loantrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20') 
      AND (`loantrans`.`purpose` = 'Loan') 
      GROUP BY MONTH(`loantrans`.`date`) 
      ORDER BY `loantrans`.`date`) 
SELECT q1.month, q1.loanout, q2.fdr 
FROM q1 
JOIN q2 ON q1.month = q2.month 
ORDER BY q1.month 
+0

У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «q2 AS (SELECT MONTH (' fdrtrans'''date') в качестве месяца, SUM ('fdrtrans''''') AS fdr 'на линии 1 – Machine

0

Это должно помочь:

SELECT s1.month, 
     s1.loanout, 
     s2.fdr 
    FROM(SELECT MONTH(`loantrans`.`date`) as month, SUM(`loantrans`.`out`) AS loanout 
     FROM loantrans 
     WHERE (`loantrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20') 
      AND (`loantrans`.`purpose` = 'Loan') 
    GROUP BY MONTH(`loantrans`.`date`   
) s1 
JOIN(SELECT MONTH(`fdrtrans`.`date`) as month, SUM(`fdrtrans`.`in`) AS fdr 
     FROM fdrtrans 
     WHERE (`fdrtrans`.`date` BETWEEN '2014-01-01' AND '2014-09-20') 
      AND (`fdrtrans`.`purpose` = 'FDR') 
    GROUP BY MONTH(`fdrtrans`.`date`) 
) s2 ON s1.month = s2.month 
ORDER BY 1 
+0

# 1064 - У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 's1 JOIN (SELECT MONTH ('fdrtrans'''date') как месяц, SUM ('fdrtrans''in') AS fdr 'в строке 9 – Machine

+0

Попробуйте еще раз, пожалуйста ... там была недостающая правая часть, я исправил ее. – DirkNM

0

В SQL Союза используется для объединения вывода запроса на выборку.

select * from loantrans 
uninon 
select * from fdrtrans 
Смежные вопросы