0

在 Oracle 10g 中,我有一个没有完全重复但有许多相似行的表。这没关系,但我想在类似行的集合中删除具有一个特定条件的行。标准是多个帐户与一个 PRACTICE_NAME 相关联。当该 PRACTICE_NAME 有多个帐户时,我想删除所有具有 NULL ACCT 值的记录。但是,如果只有一个 PRACTICE_NAME 实例,并且 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 回答