Oracle10g 如何删除相似行中具有非常特定条件的相似行?
在Oracle10g中,我有一个没有完全重复的表,但有许多类似的行。这是可以的,但我想删除类似行集合中具有一个特定条件的行。标准是多个帐户与一个机构名称关联。当有多个帐户用于该机构名称时,我想删除帐户值为空的所有记录。但是,如果一个机构名称只有一个实例,并且ACCT为NULL,则我希望保留该记录Oracle10g 如何删除相似行中具有非常特定条件的相似行?,oracle10g,Oracle10g,在Oracle10g中,我有一个没有完全重复的表,但有许多类似的行。这是可以的,但我想删除类似行集合中具有一个特定条件的行。标准是多个帐户与一个机构名称关联。当有多个帐户用于该机构名称时,我想删除帐户值为空的所有记录。但是,如果一个机构名称只有一个实例,并且ACCT为NULL,则我希望保留该记录 SAMPLE DATA: ACCT PRACTICE_NAME STATE PHONE ======================================= 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
您需要使用practice_名称上的组来计算每个组实际存在的记录数。使用这些信息,您可以找到记录>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;
唐尼,非常感谢你。