如何在类似的行中删除具有非常特定条件的类似行?

时间:2013-05-08 13:29:02

标签: oracle10g

在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

1 个答案:

答案 0 :(得分:1)

您需要使用practice_name上的组来计算每个组实际存在的记录数。使用该信息,您可以找到包含记录>的PRACTICE_NAME列表。 1。

下面的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;