在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
答案 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;