2017-01-11 69 views
-3

我在Oracle表中有以下類型的數據。 我們正在比較每一行以查看它們是相同還是不同。 我們要添加第三個新列顯示UID如果記錄是相同需要sql查詢來通過比較Oracle表的多行中的兩個字段來分配唯一的ID

SeqID RefID 
12 CO1000348570 
14 16071739 
14 9594910 
13 CO1000348570 
12 16071739 
11 9594910 
15 888745 

所需的輸出

SeqID RefID  UID 
12 CO1000348570 U1 
14 16071739  U1 
14 9594910  U1 
13 CO1000348570 U1 
12 16071739  U1 
11 9594910  U1 
15 888745   U2 

可有人請我提供的SQL查詢或過程得到的結果?

編輯

我想輸出類似下面(前兩列輸入)

SeqID  RefID   UID 

Email_18 CO1017537260 U1 
Email_19 CO1008886658 U2 
Email_19 23654191  U2 
Email_19 293063   U2 
Email_20 CO1010562711 U2 
Email_20 CO1015849928 U2 
Email_21 12780751  U3 
Phone_19 CO1017685850 U1 
Phone_19 CO1017537260 U1 
Phone_20 CO1008886658 U2 
Phone_20 23654191  U2 
Phone_22 CO1010562711 U2 
Phone_22 293063   U2 
Phone_23 21562000  U3 
+0

前6行如何獲得價值U1和最後U2?這不是很明確 – GurV

+0

是否因爲refID列有第6個重複項? – GurV

+0

是的,refID和Seq都有重複,但它們在行之間交叉。我的意思是SeqID 12有CO1000348570和16071739。 –

回答

0

試試這個:

SELECT t.*, 
    CASE 
    WHEN COUNT(*) over (partition BY seqID) > 1 
    OR COUNT(*) over (partition BY refID) > 1 
    THEN 'U1' 
    ELSE 'U2' 
    END UID 
FROM your_table t; 

它會指派組U1如果同一REFID被分配給多個seqID或相同的seqID被分配給多個refID。

+0

謝謝GurV。但它不能解決我的問題。 –

+0

我想輸出類似下面(前兩列輸入) –

+0

的SeqID \t REFID \t UID Email_18 \t CO1017537260 \t U1 Email_19 \t CO1008886658 \t U2 Email_19 U2 Email_19 U2 Email_20 \t CO1010562711 \t U2 Email_20 \t CO1015849928 \t U2 Email_21 U3 P hone_19 \t CO1017685850 \t U1 Phone_19 \t CO1017537260 \t U1 Phone_20 \t CO1008886658 \t U2 Phone_20 U2 Phone_22 \t CO1010562711 \t U2 Phone_22 U2 Phone_23 U3 –

相關問題