消除重复......更有趣

时间:2013-07-18 13:15:46

标签: sql sql-server

我的查询目标是计算每个单独贷款标识符的原始贷款余额。但是,我正在使用的数据多次使用每个贷款标识符来显示不同月份的当前实际贷款余额。因此,当我尝试计算原始贷款余额时,它会在每次出现贷款标识符时添加原始贷款余额。我想只为每个贷款标识符隔离一个原始贷款余额,但我无法这样做。我最初的想法是使用贷款的唯一特征上的where子句来过滤数据。例如,仅过滤一个月报告周期的数据。但是,月度报告期间来自“Performance_2011Q4”数据,并且在从“总获取文件”中过滤“原始未付本金余额”时无法添加为where子句。我已尝试加入这两个表但我是在尝试过滤搜索时遇到问题。有没有人知道如何消除列表中的重复项,并且只计算每个贷款标识符的“原始未付本金余额”?感谢您的帮助,如果您需要我澄清,请告诉我。代码在下面发布了无法绑定的'where'子句。

SQL Server 2012

 SELECT All a.[Loan Identifier]
          ,[Monthly Reporting Period]
          ,[Servicer Name]
          ,[Current Interest Rate]
          ,[Current Actual Unpaid Principal Balance]  
          ,[Loan Age]
          ,[Remaining Months to Legal Maturity]
          ,[Adjusted Remaining Months to Maturity]
          ,[Maturity Date]
          ,b.[ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)]
          ,[Zero Balance Code]
          ,[Zero Balance Effective Date]

            From dbo.Performance_2011Q4 a
      Join dbo.TotalAcquisition b On a.[Loan Identifier] = b. [Loan Identifier]


      Select (sum(convert (float, (dbo.[TotalAcquisition].[ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)])))) from dbo.TotalAcquisition 

 Where dbo.Performance_2011Q4.[Monthly Reporting Period] = '03/01/2013'

4 个答案:

答案 0 :(得分:3)

在Where子句中使用子查询来过滤除每个贷款标识符的最早记录之外的所有记录

Select * From dbo.Performance_2011Q4 a
   Join dbo.TotalAcquisition b 
       On a.[Loan Identifier] = b. [Loan Identifier]
Where  [Monthly Reporting Period] = 
   (Select Min([Monthly Reporting Period])
    From dbo.Performance_2011Q4 
    Where [Loan Identifier] = a.[Loan Identifier])

答案 1 :(得分:2)

您在样本数据方面没有给我们太多的帮助,所以我对您的数据做了一些假设。我的假设是,尽管TotalAcquisition中有多个记录,但对于给定的贷款标识符,原始的未付本金余额始终相同。如果是这样,这样的事情应该有效......

SELECT DISTINCT [Loan Identifier], [ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)] FROM TotalAcquisition

如果这不是您要查找的内容,请向我们提供更多信息,例如每个表中的示例行,以获取一个加载ID。

答案 2 :(得分:1)

如果您只想从查询中删除重复的行,则可以使用
DISTINCT命令。

答案 3 :(得分:0)

您可以使用简单的CTE来消除重复项,只需对查询进行微小的更改;

WITH cte AS (
    SELECT DISTINCT [Loan Identifier], [ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)]
    FROM dbo.TotalAcquisition
)
SELECT All a.[Loan Identifier]
         ,[Monthly Reporting Period]
         ,[Servicer Name]
         ,[Current Interest Rate]
         ,[Current Actual Unpaid Principal Balance]  
         ,[Loan Age]
         ,[Remaining Months to Legal Maturity]
         ,[Adjusted Remaining Months to Maturity]
         ,[Maturity Date]
         ,b.[ORIGINAL UNPAID PRINCIPAL BALANCE (UPB)]
         ,[Zero Balance Code]
         ,[Zero Balance Effective Date]
FROM dbo.Performance_2011Q4 a
JOIN cte b 
  ON a.[Loan Identifier] = b.[Loan Identifier]