2014-12-19 5 views
1

Пожалуйста, посмотрите на код нижеОшибка объединения 2 SQL запросов вместе

SELECT ongoing_portfolio.*, 
Portfolio.Activation 
FROM Ongoing_Portfolio 
INNER JOIN Portfolio ON Ongoing_Portfolio.idPortfolio = Portfolio.idPortfolio 
WHERE ongoing_portfolio.`idPortfolio`= 2 ORDER BY `Updated_Date` DESC LIMIT 4 

SELECT SUM(`Transaction_Amount`) AS `Total` 
FROM `transactions` 
WHERE `idPortfolio`= 2 AND `Transaction_TimeStamp` <= "2016-12-17" 

На самом деле, что я пытаюсь сделать здесь это.

  1. Получите финансовые данные обо всех портфелях (первый запрос).
  2. Составить общую транзакцию за данную дату как Updated_Date конкретного портфеля, на который ссылается первый запрос. (второй запрос)

Теперь мне действительно нужно сделать это в одном запросе, поэтому я попробовал ниже.

SELECT ongoing_portfolio.*, 
Portfolio.Activation, 
SUM(Transactions.`Transaction_Amount`) AS `Total` WHERE `Transaction_TimeStamp` <= ongoing_portfolio.`Updated_Date` 
FROM Ongoing_Portfolio 
INNER JOIN Portfolio ON Ongoing_Portfolio.idPortfolio = Portfolio.idPortfolio 
INNER JOIN Transactions ON Transactions.`idPortfolio` = Ongoing_Portfolio.idPortfolio 
WHERE ongoing_portfolio.`idPortfolio`= 2 ORDER BY `Updated_Date` DESC LIMIT 4 

Однако это приводит к ошибкам, как он говорит

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `Transaction_TimeStamp` <= ongoing_portfolio.`Updated_Date` 
FROM Ongoing_' at line 3 

Как я могу сделать это один запрос успешно?

+0

движение и 'Transaction_TimeStamp' <=«2016-12-17»' а где состояние, а затем добавить 'группу by' до приказа, не уверен в группировке части, так как вы не указали о по которой нужно группировать столбцы и делать сумму как просто сумму (Transactions.Transaction_Amount) –

ответ

1

Вы не можете использовать условие при получении столбца. Вы можете использовать if else или when condition for total.

SELECT ongoing_portfolio.*, 
     Portfolio.Activation, 
     SUM(case when Transaction_TimeStamp` <= ongoing_portfolio.`Updated_Date` 
      then Transactions.`Transaction_Amount` end) AS `Total` FROM Ongoing_Portfolio 
     INNER JOIN Portfolio ON Ongoing_Portfolio.idPortfolio = Portfolio.idPortfolio 
     INNER JOIN Transactions ON Transactions.`idPortfolio` = Ongoing_Portfolio.idPortfolio 
     WHERE ongoing_portfolio.`idPortfolio`= 2 group by 'Updated_Date' 
ORDER BY `Updated_Date` DESC LIMIT 4 
+0

Привет, это также порождает ошибки .... –

+0

Я сделал canges в запросе. Я забыл написать конец после случая, когда просто попробуйте сейчас. –

+0

Спасибо за ответ. «Сумма» ошибочна, похоже, что она также вычисляет некоторые другие транзакции портфеля. Из этого я получаю только 1 результат. –

Смежные вопросы