SQL 查询:JOIN 三个 tables 然后在加入第 3 个 table 后不显示结果

SQL Query: JOIN Three tables thenNot showing the results after joining the 3rd table

我有如下三个表:

LoanMaster Table

LoanID  BranchName  DisbursementDate  DisbursementAmount
12345   H1          01-01-18          25000
12346   A1          05-01-18          20000
12347   M1          06-02-18          16000

Collection Table

LoanID  TransactionDate Amount
12345   05-02-18        500
12346   06-02-18        600

逾期CollectionTable

LoanID  TransactionDate Amount
12345   05-02-18    200
12346   07-02-18    300

需要输出

LoanID  BranchName  TransactionDate Collection Amount   Overdue Amount  
12345   H1          05-02-18        500                 200 
12346   A1          06-02-18        600                 NULL    
12346   A1          07-02-18        NULL                300 
12347   M1          NULL            NULL                NULL    

我应用了以下两个查询来连接两个表

"QRY_Test2":

SELECT   c.LoanID LoanID, date(c.TransactionDate) TransDate, (c.Amount) Amt,
         d.Amount = NULL FROM  Collection c 
UNION
SELECT  d.LoanID LoanID, date(d.TransactionDate) TransDate, c.Amount = NULL,
         (d.Amount) as Amt FROM  Overdue Amount d 

然后分组得到唯一的结果,命名为finalTable:

SELECT LoanID, TransDate, sum("Amount"), sum("Amt") FROM  "QRY_Test2"
GROUP BY LoanID, TransDate 

然后我得到以下结果:

LoanID  TransactionDate Collection Amount   Overdue Amount  
12345   05-02-18        500                 200 
12346   06-02-18        600                 NULL    
12346   07-02-18        NULL                300 

然后如果我将左连接应用到 LoanMaster,我得不到任何结果:

Select LoanID, BranchName, TransactionDate, CollectionAmount, OverdueAmount from LoanMaster lm LEFT JOIN on FinalTable f lm.LoanID = f.loanid

只是想了解问题所在,我需要上述所需的输出。

这里的挑战是生成一个 table,其中包含给定日期和贷款的收款和逾期金额,在一条记录中。我们可以采用 CollectionOverdueCollection table 的并集,然后按贷款和日期进行透视。然后,刚刚离开加入贷款大师table到这个子查询。

SELECT
    lm.LoanID,
    lm.BranchName,
    t.TransactionDate,
    t.CollectionAmount,
    t.OverdueAmount
FROM LoanMaster lm
LEFT JOIN
(
    SELECT LoanID, TransactionDate,
        MAX(CASE WHEN type = 1 THEN Amount END) AS CollectionAmount,
        MAX(CASE WHEN type = 2 THEN Amount END) AS OverdueAmount
    FROM
    (
        SELECT LoanID, TransactionDate, Amount, 1 AS type
        FROM Collection
        UNION ALL
        SELECT LoanID, TransactionDate, Amount, 2
        FROM OverdueCollection
    ) t
    GROUP BY
        LoanID, TransactionDate
) t
    ON lm.LoanID = t.LoanID;