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,其中包含给定日期和贷款的收款和逾期金额,在一条记录中。我们可以采用 Collection
和 OverdueCollection
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;
我有如下三个表:
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,其中包含给定日期和贷款的收款和逾期金额,在一条记录中。我们可以采用 Collection
和 OverdueCollection
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;