2014-07-18 410 views
1

我正在查看基於各種標準(如信標比分,債務收入和貸款價值)的政策例外報告。此信息保存在多個不同的表格中,現在「貸值對比」列在我的報告中導致多個條目,因爲特定的貸款可能有多個擔保條。爲了進行適當的異常監控,我只需要一個條目。每列不同值

說了這麼多,我該如何執行以下代碼,併爲dbo.Folders.Id創建一個不同的值?在SELECT語句後面加上'DISTINCT'似乎不起作用。 (敏感值用'#'掩蓋)

SELECT dbo.Folders.LoanOfficerId, 
     dbo.Folders.Id, 
     dbo.CollateralType.Description, 
     dbo.Customers.CUSTNAME, 
     dbo.Folders.DateLoanActivated, 
     dbo.Folders.CurrentAccountBalance, 
     dbo.Folders.UnadvancedCommitAmount, 
     dbo.Folders.BeaconScore, 
     dbo.Folders.DebtToIncome, 
     dbo.Collateral.LoanToValue 
    FROM dbo.Folders 
    INNER JOIN dbo.Customers 
      ON dbo.Folders.CustomersNAMEKEY = dbo.Customers.NAMEKEY 
    INNER JOIN dbo.Collateral 
      ON dbo.Folders.Id = dbo.Collateral.FoldersID 
    INNER JOIN dbo.CollateralType 
      ON dbo.Collateral.CollateralTypeCollCode = dbo.CollateralType.CollCode 
    WHERE ( (dbo.Folders.BeaconScore < ###) 
      AND (dbo.Folders.BeaconScore > ###) 
      AND (dbo.Folders.CloseCode = 'O') 
      AND (dbo.Folders.CollateralCode <> ##) 
     ) 
     OR ( (dbo.Folders.CloseCode = 'O') 
      AND (dbo.Folders.CustomerType <> '###') 
      AND (dbo.Folders.CustomerType <> '###') 
      AND (dbo.Folders.DebtToIncome > ##) 
      ) 
     OR ( (dbo.Folders.CloseCode = 'O') 
      AND (dbo.Folders.CustomerType = '###') 
      AND (dbo.Folders.DebtToIncome > ##) 
      ) 
     OR ( (dbo.Folders.CloseCode = 'O') 
      AND (dbo.Folders.CustomerType = '###') 
      AND (dbo.Folders.DebtToIncome > ##) 
      ) 
     OR (dbo.Collateral.LoanToValue > dbo.CollateralType.LTV) 

對我的代碼有任何建設性的批評是值得歡迎的。 (上述語句中的靜態值在稍後用閾值/條件表修正。)從我所看到的,其他人已經建議使用ROW_COUNT()和PARTITION,但我無法使語法工作。

回答

0

關於格式化的評論:學習使用表別名。它們使查詢更易於讀取和寫入。

如果您只需要結果中的一行,則可以使用row_number()。這列舉了每個文件夾的行(在你的情況下),你只需要使用第一個。您可以通過這樣做:

with t as (
     <your query here> 
    ) 
select t.* 
from (select t.*, 
      row_number() over (partition by FoldersId order by (select NULL)) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

在另一方面,如果你需要從抵押表彙總的信息,那麼你會在你的查詢中使用group by與適當的聚合函數。

+0

謝謝,戈登!我在之前的回覆中看到了這一點。我的整個問題都在分區中。分區中的列標題應該只是「Id」。我想到了這一點,當我嘗試ORDER BY dbo.Folders.DateLoanActivated並得到了錯誤。 ORDER BY DateLoanActivated工作正常。再次感謝!如果我有信譽,我會加倍努力! – Henchman21