2014-12-19 3 views
0

Пожалуйста, взгляните на приведенный ниже код.`Group By` возвращает пустые строки

SELECT ongoing_portfolio.*, 
    Portfolio.Activation, 
    SUM(case when Transaction_TimeStamp <= ongoing_portfolio.`Updated_Date` 
     then Transactions.`Transaction_Amount` ELSE 0 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`= 5   
    GROUP BY Ongoing_Portfolio.`Updated_Date` DESC LIMIT 4 

Это прекрасно работает «только», если есть «по крайней мере» 1 сделка для конкретного portfolio. Если для этого портфеля вообще нет транзакций, он просто возвращает пустую строку, что ничего не значит.

Я пробовал группировку с Ongoing_Portfolio.idOngoing_Portfolio, Transactions.idTransactions, Ongoing_Portfolio.idPortfolio, но ничего хорошего. Почему это происходит так?

+1

Использовать 'оставил join' вместо' внутренней join' –

+0

@juergend: Хорошо, но на что? –

ответ

1

Заменить

INNER JOIN Transactions ON Transactions.`idPortfolio` = Ongoing_Portfolio.idPortfolio 

по

LEFT JOIN Transactions ON Ongoing_Portfolio.idPortfolio = Transactions.`idPortfolio` 
0

Попробуйте использовать LEFT JOIN вместо INNER JOIN

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