创建组指示符(SQL)

时间:2013-10-22 15:43:31

标签: sql oracle plsql toad

我希望使用SQL(特别是Oracle)为查询创建组指示符。基本上,我正在寻找某些列的重复条目,虽然我可以找到那些我想要的是一些指示器来说明重复项来自哪些行。

下面是我要做的一个例子(在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 个答案:

答案 0 :(得分: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