2017-01-19 50 views
0

我的基表(名稱:duplicates)具有重複列表product_id。沒有包括獨特的product_id。我需要根據以下標準來刪除重複的:SQL:基於嵌套IF語句的重複刪除:

product_id in_stock price sales_channel 
A112233  NULL  12.95 Online 
A112233  11345678 12.95 Store 
A112233  12466654 11.95 NULL 
  1. 首先,採取product_id這是在我們的數據庫in_stock(由NOT NULL表示)
  2. 如果重複仍然存在,然後採取product_id與最低price
  3. 如果重複仍然存在,然後採取product_id其中sales_channel = ‘Online’
  4. 如果重複仍然存在,然後取一個隨機行爲電子商務ACH product_id
  5. **考慮到in_stocksales_channel可以包含NULL

我是想充分利用ROW_NUMBER()功能提供的排名給每個分區,但我不知道如何,因爲它不是這個代碼基於靜態分區(分區將改變,因爲某些product_id被忽略)。

以前有人做過這個嗎?

+0

我刪除了所有無關的標籤。請使用您正在使用的* 1 * dbms標記問題。 –

回答

0

你仍然可以使用ROW_NUMBER()功能,所有你需要的是更多的條件添加到ORDER BY條款,像這樣:

with a as(
SELECT *, 
ROW_NUMBER() OVER (PARTITION BY product_id 
ORDER BY CASE in_stock IS NOT NULL THEN 1 ELSE 2 END, 
     price, 
     CASE COALESCE(sales_channel, '') = 'Online' THEN 1 ELSE 2 END) as rn 
from duplicates) 
select * from a where rn = 1