2017-02-10 35 views
0

我需要計算每年借款人總數(cnsmr_accnt.cnsmr_id)以及這些借用人每年的總本息餘額。我的下面的代碼完成了這一點,但我需要統計每個借款人只有一次(第一年)在所有年份。SQL幫助 - 一次計算記錄

SELECT DISTINCT  
MIN(DATEPART(YEAR, UDEFDebtInfo.UDEFDebtPlacementDt)) AS [First Placement Year], 
COUNT(cnsmr_accnt.cnsmr_id) AS [Borrower Count], 
SUM(UDEFDebtInfo.UDEFDebtOrigPrincBal) AS [Principal Balance], 
SUM(UDEFDebtInfo.UDEFDebtOrigIntBal) AS [Int Balance] 
FROM UDEFDebtInfo 
INNER JOIN cnsmr_accnt ON UDEFDebtInfo.cnsmr_accnt_id = cnsmr_accnt.cnsmr_accnt_id 
GROUP BY DATEPART(YEAR, UDEFDebtInfo.UDEFDebtPlacementDt) 

例如,如果借款人在2008年有一個UDEFDebtPlacementDt $ 500一本金餘額及$ 100,UDEFDebtPlacementDt 2009年利息餘額$ 1,000本金餘額和$ 200之間利益平衡,則借款人應僅在2008年計算,本金餘額爲1,500美元,利息餘額爲300美元。

+1

查看OVER子句中的文檔。我認爲這可能是你的答案。您還需要PARTITION部分。 – SteveB

+0

COUNT(DISTINCT cnsmr_accnt.cnsmr_id)也許? – dean

+0

如果您添加了腳本來創建所需的數據,那麼對於某人來說,幫助會更容易。以及預期的產出。迪恩可能是對的,你需要的只是伯爵的不同之處。 – SteveB

回答

0

所以借款人cnsmr_id誰在cnsmr_accnt有幾個賬戶。你想要的數額和第一年借款人。所以,你必須通過cnsmr_id組。

一旦你有了這個數據,你要聚集年,所以你組由年然後。

SELECT 
    first_placemant_year AS [First Placement Year], 
    COUNT(*) AS [Borrower Count], 
    SUM(principal_balance) AS [Principal Balance], 
    SUM(int_balance) AS [Int Balance] 
FROM 
(
    SELECT 
    ca.cnsmr_id, 
    MIN(DATEPART(YEAR, di.UDEFDebtPlacementDt)) AS first_placemant_year, 
    SUM(di.UDEFDebtOrigPrincBal) AS principal_balance, 
    SUM(di.UDEFDebtOrigIntBal) AS int_balance 
    FROM UDEFDebtInfo di 
    INNER JOIN cnsmr_accnt ca ON di.cnsmr_accnt_id = ca.cnsmr_accnt_id 
    GROUP BY ca.cnsmr_id 
) borrowers 
GROUP BY first_placemant_year 
ORDER BY first_placemant_year; 
+0

真棒,謝謝 – user3641053

0

select中的嵌套查詢應該工作。對於校長,你可以試試下面的查詢,並添加興趣相同的方式

SELECT DISTINCT  
MIN(DATEPART(YEAR, UDEFDebtInfo.UDEFDebtPlacementDt)) AS [First Placement Year] 
, COUNT(cnsmr_accnt.cnsmr_id) AS [Borrower Count] 
, (SELECT SUM(UDEFDebtInfo.UDEFDebtOrigPrincBal) FROM UDEFDebtInfo u WHERE u.cnsmr_accnt_id=UDEFDebtInfo.cnsmr_accnt_id) AS [Principal Balance] 
FROM UDEFDebtInfo 
INNER JOIN cnsmr_accnt ON UDEFDebtInfo.cnsmr_accnt_id = cnsmr_accnt.cnsmr_accnt_id 
GROUP BY DATEPART(YEAR, UDEFDebtInfo.UDEFDebtPlacementDt) 
0

你只需要使用DISTINCT與COUNT:

COUNT(DISTINCT cnsmr_accnt.cnsmr_id) AS [Borrower Count], 
-1

不要使用嵌套查詢。由於用戶3083310建議的。使用過(分區計數(*)你的表現將超過80%更好,然後嵌套查詢。