2014-12-22 165 views
2

我寫了下面的代碼,選擇從每個貸款餘額支付利息合計:SQL - JOIN聚合表與非聚合表

SELECT 
a.PARENTREF, 
a.INTEREST - Isnull(b.INTEREST,0) AS INTEREST 

FROM 
(SELECT 
PARENTREF, 
SUM(TOTAL) AS INTEREST 
    FROM LG_011_BNCREPAYTR 
    WHERE TRANSTYPE = 0 
    GROUP BY PARENTREF) a LEFT OUTER JOIN 
(SELECT 
PARENTREF, 
SUM(TOTAL) AS INTEREST 
    FROM LG_011_BNCREPAYTR 
    WHERE TRANSTYPE = 1 
    GROUP BY PARENTREF) b 
ON a.PARENTREF = b.PARENTREF 

它帶來了類似下面的表格:

PARENTREF  INTEREST 
     1   500.93 
     2   510.00 
     3  1200.90 
     4   500.93 

現在,在數據庫中的另一個表保存其他有關貸款的信息,如貸款說明。該表的LOGICALREF是該表中的PARENTREF。這表如下:

LOGICALREF   DESCRIPTION  CURRENCYREF   DUEDATE 
      1   CAR LOAN     0  2015-10-01 
      2  CONSUMER LOAN     2  2015-10-01 
      3   CAR LOAN     4  2015-10-01 
      4   CAR LOAN     3  2015-10-01 

我想我的表,我提到的最後一個表合併,但由於某種原因,我得到了DESCRIPTIONCURRENCYREFDUEDATE作爲NULL。我認爲由於我正在使用GROUP BY而出現了問題,因爲如果我不彙總,這些功能將起作用。我想表如下:

PARENTREF  INTEREST   DESCRIPTION  CURRENCYREF  DUEDATE 
     1   500.93    CAR LOAN    0 2015-10-01 
     2   510.00  CONSUMER LOAN    2 2015-10-01 
     3  1200.90    CAR LOAN    4 2015-10-01 
     4   500.93    CAR LOAN    3 2015-10-01 

非常感謝。

回答

0

試試這個:

SELECT a.PARENTREF, a.INTEREST - ISNULL(b.INTEREST, 0) AS INTEREST, 
     T.DESCRIPTION, T.CURRENCYREF, T.DUEDATE 
FROM YourTable T 
INNER JOIN (SELECT PARENTREF, SUM(TOTAL) AS INTEREST 
      FROM LG_011_BNCREPAYTR 
      WHERE TRANSTYPE = 0 
      GROUP BY PARENTREF) A ON T.LOGICALREF = A.PARENTREF 
LEFT OUTER JOIN (SELECT PARENTREF, SUM(TOTAL) AS INTEREST 
       FROM LG_011_BNCREPAYTR 
       WHERE TRANSTYPE = 1 
       GROUP BY PARENTREF 
       ) b ON a.PARENTREF = b.PARENTREF; 

OR

您也可以使用下面的查詢找到解決

SELECT A.PARENTREF, 
     (SUM(CASE WHEN A.TRANSTYPE = 0 THEN A.TOTAL ELSE 0 END) - SUM(CASE WHEN A.TRANSTYPE = 1 THEN A.TOTAL ELSE 0 END)) AS INTEREST, 
     T.DESCRIPTION, T.CURRENCYREF, T.DUEDATE 
FROM YourTable T 
INNER JOIN LG_011_BNCREPAYTR A ON T.LOGICALREF = A.PARENTREF 
GROUP BY A.PARENTREF;