【问题标题】:Create a group indicator (SQL)创建组指示符 (SQL)
【发布时间】:2013-10-22 15:43:31
【问题描述】:

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

下面是我想要做的一个例子(在姓名、邮编、电话上查找重复项)。 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         |
+----------+---------+-----------+------------+-----------+-----------+

【问题讨论】:

    标签: sql oracle plsql toad


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 2015-03-03
      相关资源
      最近更新 更多