0

Oracle 10g では、完全に重複するテーブルはありませんが、類似した行が多数あります。これでもいいのですが、似たような行の集まりの中から、特定の条件で行を削除したいのです。基準は、複数のアカウントが 1 つの PRACTICE_NAME に関連付けられていることです。その PRACTICE_NAME に複数のアカウントがある場合、NULL ACCT 値を持つすべてのレコードを削除したいと考えています。ただし、PRACTICE_NAME のインスタンスが 1 つしかなく、ACCT が NULL の場合、レコードを保持したいと考えています。

SAMPLE DATA:
ACCT    PRACTICE_NAME   STATE   PHONE
=======================================
NULL      PRACT1         MI    111-1111
1523      PRACT1         MI    111-1111
6824      PRACT1         MI    111-1111
NULL      PRACT2         MI    222-2222
8945      PRACT2         MI    222-2222
NULL      PRACT3         MI    333-3333
1486      PRACT4         MI    444-4444

これは私が望む結果です:

ACCT    PRACTICE_NAME   STATE   PHONE
=======================================
1523      PRACT1         MI    111-1111
6824      PRACT1         MI    111-1111
8945      PRACT2         MI    222-2222
NULL      PRACT3         MI    333-3333
1486      PRACT4         MI    444-4444
4

1 に答える 1

1

各グループに実際に存在するレコード数をカウントするには、practice_name でグループを使用する必要があります。その情報を使用して、レコード > 1 の PRACTICE_NAME のリストを見つけることができます。

以下のSQLは、あなたが言及したケースを処理します。

DELETE FROM ZZ_TEST ZZ
  WHERE ZZ.PRACTICE_NAME IN (
      SELECT PRACTICE_NAME FROM (  
           SELECT PRACTICE_NAME, COUNT (PRACTICE_NAME) AS COUNTER FROM ZZ_TEST
               GROUP BY PRACTICE_NAME) TMP_COUNTER
      WHERE COUNTER > 1)
      AND ACCT IS NULL;
于 2013-05-08T13:57:38.633 に答える