日期:2014-05-17 浏览次数:20899 次
-- 下面是不是你想要的结果? select distinct t1, t2 from (select t.*, count(1) over(partition by t1, t2) v_count from test t) where v_count > 1
------解决方案--------------------
可否?
SQL> SELECT C1, C2 2 FROM (SELECT C1, 3 C2, 4 COUNT(C2) OVER(PARTITION BY C1) R1, 5 COUNT(C1) OVER(PARTITION BY C2) R2 6 FROM (SELECT DISTINCT C1, C2 FROM T)) 7 WHERE R1 = 1 8 AND R2 = 1; C1 C2 -- -- C D D F
------解决方案--------------------
-- TRY IT .. SQL> SELECT * FROM TEST_NUM3; FIELD1 FIELD2 FIELD3 FIELD4 ------ ------ ------ ------ A A A A A C B B B B C C E B D D C D E E C D F F D F G G D F G H D F G Z H I J M 10 rows selected SQL> SELECT FIELD1, FIELD2, FIELD3, FIELD4 2 FROM (SELECT TT.*, 3 COUNT(1) OVER(PARTITION BY FIELD1) NEW_FIELD1, 4 COUNT(1) OVER(PARTITION BY FIELD2) NEW_FIELD2, 5 COUNT(1) OVER(PARTITION BY FIELD3) NEW_FIELD3, 6 COUNT(1) OVER(PARTITION BY FIELD1, FIELD2, FIELD3) COUNTS 7 FROM TEST_NUM3 TT) ZZ 8 WHERE NEW_FIELD1 = NEW_FIELD2 9 AND NEW_FIELD2 = NEW_FIELD3 10 AND NEW_FIELD3 = COUNTS; FIELD1 FIELD2 FIELD3 FIELD4 ------ ------ ------ ------ D F G G D F G H D F G Z H I J M
------解决方案--------------------
select a.*
from t1 a,
(select ia.seg1 from t1 ia group by ia.seg1 having count(*)=1) b,
(select ib.seg1 from t1 ib group by ib.seg1,ib.seg2 having count(*)>1) c
where a.seg1=b.seg1 or a.seg1=c.seg1;
这个也可以实现,只是不知效率如何,楼主试后可否给个评价?
写成in(列表)的格式
select a.*
from t1 a
where a.seg1 in (select ia.seg1 from t1 ia group by ia.seg1 having count(*)=1) or
a.seg1 in (select ib.seg1 from t1 ib group by ib.seg1,ib.seg2 having count(*)>1)
我感觉这两个SQL的效率差不多。
支持一下!