2013-10-22 51 views
1

我正在尋找使用SQL(特別是Oracle)爲查詢創建組指示符。基本上,我正在查找某些列的重複條目,雖然我可以找到那些我也想要的是某種指示器來指出重複項來自哪些行。創建組指示器(SQL)

下面是我正在尋找的一個例子(在Name,Zip,Phone上尋找重複項)。 Name = aaa的行全部在同一組中,bb不是,c是。

有甚至有辦法做到這一點?我在想用什麼OVER(PARTITION BY ...但我不能想辦法只爲每個組增量。

+----------+---------+-----------+------------+-----------+-----------+ 
| Name  | Zip  | Phone  | Amount  | Duplicate | Group  | 
+----------+---------+-----------+------------+-----------+-----------+ 
| aaa  | 1234 | 5555555 | 500  | X   | 1   | 
| aaa  | 1234 | 5555555 | 285  | X   | 1   | 
| bb  | 545  | 6666666 | 358  |   | 2   | 
| bb  | 686  | 7777777 | 898  |   | 3   | 
| aaa  | 1234 | 5555555 | 550  | X   | 1   | 
| c  | 5555 | 8888888 | 234  | X   | 4   | 
| c  | 5555 | 8888888 | 999  | X   | 4   | 
| c  | 5555 | 8888888 | 230  | X   | 4   | 
+----------+---------+-----------+------------+-----------+-----------+ 

回答

1

看起來你可以只使用

(CASE WHEN COUNT(*) OVER (partition by name, zip, phone) > 1 
     THEN 'X' 
     ELSE NULL 
    END) duplicate, 
DENSE_RANK() OVER (ORDER BY name, zip, phone) group_rank 

行具有相同namezipphone將具有相同group_rank。這裏是一個SQL Fiddle example

+0

完美!太謝謝你了,那的偉大工程! – user1723699