2017-03-08 5 views
2

データの購入時に重複しているものをいくつかの複雑な条件の下でのみマークする必要があります。のは、私はこのようなテーブルがあるとしましょう:SQLいくつかの条件で重複をハイライトする方法

col1 col2 
1  a 
1  a 
1  a 
2  #B 
2  #B 
1  a 
3  #B 
3  #B 
2  #B 
1  a 
4  #A 
4  #A 
5  c 

私はそれらの記録マークする必要があります。COL2で

値は「#」で始まり、(それがCOL2内の重複する値であり、それは下にあるをcol1の異なる値)。

ので、私はこれを取得する必要があります:

col1 col2 newcol 
1  a 
1  a 
1  a 
2  #B  1 
2  #B  1 
1  a 
3  #B  1 
3  #B  1 
2  #B  1 
1  a 
4  #A 
4  #A 
5  c 

それはAND「#B」3」の下に見つけることができますCOL2に重複があるため、COL2で「#B」を持つ行がマークされている理由は、 "と" 2 "(したがって2つ以上の異なる値)をcol1に格納します。 「#A」のレコードがマークされていない理由は、col2の複製ではcol1の1つの値(「4」)の下にあるためです。

私はDashDBは、ウィンドウ関数をサポートして考えるdashDB

答えて

1

で働いています。もしそうなら、あなたが行うことができます:

select col1, col2, 
     (case when min_col1 <> max_col1 then 1 end) as flag 
from (select t.*, 
      min(col1) over (partition by col2) as min_col1, 
      max(col1) over (partition by col2) as max_col1 
     from t 
    ) t; 

ます。また、ウィンドウ関数のない似た何かを行うことができます。ここで

は別の方法である:

select t.*, t2.flag 
from t join 
    (select col2, 
      (case when min(col1) <> max(col1) then 1 end) as flag 
     from t 
     group by col2 
    ) t2 
    on t.col2 = t2.col2; 
関連する問題