我在我的sql結果中有列A,B,C。 B列可能有重複的記錄。爲了避免重複的B值,我需要檢查C中的值。如果C列的值爲0,那麼只應在B中選擇特定的行。根據條件篩選Mssql記錄
這種處理只應對重複記錄進行。
Column A | Column B | Column C
value 1 | value 2 | 1
value 3 | value 2 | 0
在上面的代碼中只有row,value 3 |值2 | 0,應在查詢結果
我在我的sql結果中有列A,B,C。 B列可能有重複的記錄。爲了避免重複的B值,我需要檢查C中的值。如果C列的值爲0,那麼只應在B中選擇特定的行。根據條件篩選Mssql記錄
這種處理只應對重複記錄進行。
Column A | Column B | Column C
value 1 | value 2 | 1
value 3 | value 2 | 0
在上面的代碼中只有row,value 3 |值2 | 0,應在查詢結果
選擇試試這個:
SELECT
A, B, C
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY B ORDER BY CASE WHEN C = 0 THEN 0 ELSE 1 END) rn,
A, B, C
FROM Tbl
) A
WHERE rn = 1
如果C
最小值爲0,你可以ORDER BY
只是C
。
你領先於我:),附上小提琴[鏈接](http://sqlfiddle.com/#!3/2f221/2) –
還有一個選項
SELECT t1.ColumnA, t1.ColumnB, t1.ColumnC
FROM dbo.test32 t1
WHERE NOT EXISTS (
SELECT 1
FROM dbo.test32 t2
WHERE t2.ColumnB = t1.ColumnB
GROUP BY t2.ColumnB
HAVING COUNT(*) > 1 AND MAX(t2.ColumnC) = t1.ColumnC
)
演示上SQLFiddle
展示樣本,請,文字不說清楚... –
確定。那麼,你在哪裏編碼和努力?你有什麼嘗試? – Raj