2017-03-08 100 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 

爲什麼在COL2「#B」行被標記的原因是因爲它是在COL2重複,「#B」可以「3下找到「和」2「(所以2個或更多不同的值)在col1中。用「#A」記錄的共振不被標記是因爲雖然它們在col2中是重複的,但它們在col1中只有一個值(「4」)。

我正在dashDB工作

回答

1

我認爲DashDB支持窗口函數。如果是這樣,你可以這樣做:

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; 
相關問題