1

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         |
+----------+---------+-----------+------------+-----------+-----------+
4

1 に答える 1

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

name同じ、を持つ行は、同じにzipなります。SQL Fiddleの例を次に示します。phonegroup_rank

于 2013-10-22T15:51:09.550 に答える