2015-06-02 47 views
0

我想知道如何在表中爲重複行創建一個標誌。例如:如果我得到重複的行,它會顯示我1,如果我沒有得到任何重複行,它會顯示0如何在oracle中爲重複值創建一個標誌

我嘗試了我都用來檢查它是否會工作

SQL> select * from t_flag 
    2/

EMP_NAME     EMP_NO DEPT 
-------------------------------------------------- --------- -------------------- 

    ROBI      1 AGRO 
    ROBI      1 AGRO 
    BORIS      2 IT 
    SID       3 VET 
    BORIS      2 IT 

    select t_flag.*, 
(case when row_number() over (partition by emp_name,emp_no,dept order by emp_name) = 1 
       then 0 else 1 
      end) as GroupFlag 
from t_flag 
SQL>/

EMP_NAME            EMP_NO DEPT     GROUPFLAG 
-------------------------------------------------- --------- -------------------- --------- 
BORIS              2 IT       0 
BORIS              2 IT       1 
ROBI              1 AGRO       0 
ROBI              1 AGRO       1 
SID              3 VET       0 

什麼,我想從結果讓這個測試表下面是:重複1行 和0非重複行

謝謝!

+0

使用'COUNT()'解析函數,而不是'ROW_NUMBER()' –

+0

的問題是:你爲什麼允許重複? – jarlh

+0

@ jarlh,我在工作中經常在我的oracle表中獲取重複行。這就是爲什麼我必須在繼續更新,插入等之前檢查表格。 – Iftekhar

回答

1

您可以使用分析函數case。但你想要的是count(*),而不是row_number()

select t.*, 
     (case when count(*) over (partition by emp_name, emp_no, dept) > 1 
      then 1 else 0 
     end) as groupflag 
from t_flag t; 
+0

感謝您對新查詢的答覆。如果我能做到最好使用此查詢檢查所有表。 – Iftekhar

+0

你問的問題是關於一張表。如果您對多個表格有疑問,請詢問*另一個*問題。當OP改變他們的問題並且使答案無效時,我發現它是不禮貌的,因爲答案可能會引起低估。 –

+0

好的,我會問另一個question.cheers。 – Iftekhar

相關問題