Duplication

每個不同的值僅顯示 1 行

  • March 3, 2020

這似乎是我經常遇到的一個問題,但我還沒有弄清楚(我不是 dba)。我正在為我正在創建的報告執行查詢,但是使用者不希望為相同的“案例編號”顯示任何重複的行。

我已經嘗試過“選擇不同”和“分組依據”,但都沒有顯示我希望它們顯示的結果。

問題是報告查詢的列可以有 2 個不同的可能值,我們只想顯示匹配其中任何一個值的案例,但我們不想顯示特定案例超過 1 次。

這是查詢:

SELECT cases.casenum, 
      sp_first_party(cases.casenum), 
      cases.matcode, 
      cases.open_status, 
      cases.date_opened, 
      cases.close_date 
FROM cases, 
    insurance 
WHERE (cases.casenum = insurance.case_num) 
 AND  cases.date_opened >= :start 
 AND cases.date_opened <= :end 
 AND (    insurance.policy_type = 'Liability' 
       OR insurance.policy_type = 'SUM') 
 AND insurance.date_settled is Null  
 AND (    cases.matcode like 'GPI' 
       OR cases.matcode like 'MVA' 
       OR cases.matcode like 'S&F') 
 AND cases.close_date is not NULL  

這就是我認為的問題區域:

(insurance.policy_type = 'Liability' OR insurance.policy_type = 'SUM')

一個“案例”/“案例編號”可以有多種保險單類型……這意味著它們可以有責任或總和,或兩者兼而有之。報告的輸出會為出現的這些保險類型中的任何一種的每個實例顯示一個新行。

我們希望每個案例只顯示一行,無論有多少/哪些保險單類型分配給案例……但仍然只顯示符合該標準的案例。

我試過選擇不同的,以及按cases.casenum分組,我在這裡做錯了什麼?

感謝您的閱讀!

PS-這是針對 cms 平台/應用程序的,但它在 t-sql 上執行(與 mssql 語法相同)。

這是輸出範例 - 正如您在最左側的列中看到的那樣,“案例編號”列有多個相同的值。這是因為符合條件的案例編號有多個不同的 insurance.policy_type。雖然我們仍然需要按這些策略類型進行過濾,但我們不希望為每個類型看到額外的行。

輸出

您不必使用MIN,只需該ROW_NUMBER行即可讓您為每個案例編號選擇一行。

如果沒有數據模型,我無法測試以下查詢:

WITH Src AS 
(
SELECT cases.casenum, 
      sp_first_party(cases.casenum) as first_party, 
      cases.matcode, 
      cases.open_status, 
      cases.date_opened, 
      cases.close_date,
      ROW_NUMBER() OVER(PARTITION BY cases.casenum ORDER BY insurance.policy_type) as rank
FROM cases, 
    insurance 
WHERE (cases.casenum = insurance.case_num) 
 AND  cases.date_opened >= :start 
 AND cases.date_opened <= :end 
 AND (    insurance.policy_type = 'Liability' 
       OR insurance.policy_type = 'SUM') 
 AND insurance.date_settled is Null  
 AND (    cases.matcode like 'GPI' 
       OR cases.matcode like 'MVA' 
       OR cases.matcode like 'S&F') 
 AND cases.close_date is not NULL 
)
SELECT * FROM Src WHERE rank = 1

引用自:https://dba.stackexchange.com/questions/261007