SQL:基于嵌套IF语句重复数据删除:

时间:2017-01-19 22:51:49

标签: sql

我的基表(名称:duplicates)包含重复的product_id列表。没有包含明确的product_id。我需要根据以下标准进行重复删除:

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. 如果重复项仍然存在,则为每个product_id
  5. 选择一个随机行
  6. **考虑in_stocksales_channel可以包含NULL
  7. 我试图利用ROW_NUMBER()函数为每个分区提供排名,但我不确定如何对此进行编码,因为它不是基于静态分区(分区将更改为某个{{1}被忽视了。)

    之前有人这样做过吗?

1 个答案:

答案 0 :(得分: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