2017-01-19 17 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. まず、重複がまだ解決しない場合(NOT NULLで示されている)私達のデータベースでin_stockあるproduct_id
  2. を取り、その後でproduct_idを取ります重複がまだ続く場合price
  3. 最低、次に取る重複がまだ続く場合sales_channel = ‘Online’
  4. 、次いでEための一つのランダム行を取るproduct_id ACH product_id
  5. は**私は、各パーティションにランキングを提供するROW_NUMBER()機能を活用しようとしていたが、それはありませんので、私はこれをコーディングするかどうかはわかりませんin_stocksales_channelNULL

を含めることができることを考えてみましょう静的パーティションに基づいています(パーティションは特定のproduct_idが無視されるため変更されます)。

誰でもこれを前に実行しましたか?

+0

私はすべての余分なタグを削除しました。あなたが使用している* 1 * dbmsで質問にタグを付けてください。 –

答えて

0

あなたはまだあなたが必要とするすべてはこのように、ORDER BY句に複数の条件を追加することで、ROW_NUMBER()機能を使用することができます。

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 
関連する問題