select 任务编号,企业编号 from 你的表 group by 任务编号,企业编号 having count(*)>1 and min(范围编号)<>max(范围编号)
[其他解释]
select 任务编号,企业编号 from t group by 任务编号,企业编号 having count(distinct 范围编号 )>1
[其他解释] WITH t AS ( select 1 ID ,'rw001' rw,'Qy001' qy, 1 fw from dual union all select 2 ,'rw001','Qy002', 1 from dual union all select 3 ,'rw001','Qy002', 2 from dual union all select 4 ,'rw001','Qy004', 1 from dual union all select 5 ,'rw002','Qy005', 1 from dual union all select 6 ,'rw002','Qy004', 1 from dual union all select 7 ,'rw002','Qy004', 1 from dual union all select 8 ,'rw002','Qy008', 1 from dual union all select 9 ,'Rw003','Qy011', 1 from dual union all select 10,'Rw003','Qy012', 1 from dual union all select 11,'Rw003','Qy013', 1 from dual union ALL select 111,'Rw003','Qy013', 1 from dual union all select 12,'Rw003','Qy014', 1 from dual ) SELECT rw,qy FROM t t GROUP BY rw,qy HAVING COUNT(1)>1 AND NOT EXISTS (SELECT 1 FROM t a GROUP BY rw,qy,fw HAVING COUNT(1)>1 AND a.rw=t.rw) [其他解释] intersect 试试 [其他解释] INTERSECT 试试 [其他解释]
巧妙 [其他解释]
这样,欠妥吧,范围编号是这样的呢 1 2 2 2 3 [其他解释]
其实min<>max意思是不统计范围编号相同的,因为按照任务编号和企业编号分组后得到的结果是不管范围编号是否相同只要任务编号和企业编号相同就会分成一组。所以havingcount>1后再剔除范围编号相同的数据,结果自然是楼主需要的。 [其他解释] 这个问题其实很简单 比如你这个表叫:AAA SQL语句: select distinct(e1.任务编号),e1.企业编号 from AAA e1,AAA e2 where e1.任务编号=e2.任务编号 and e1.企业编号=e2.企业编号 and e1.范围编号<>e2.范围编号
查询结果:rw001 qy002 [其他解释]
UP [其他解释] select 任务编号,企业编号 from 你的表 group by 范围编号 having count(1)=0;
[其他解释]
select 任务编号,企业编号 from 你的表 group by 范围编号 having count(1)=1; [/Quote] [其他解释] select distinct e1.任务编号,e1.企业编号 from AAA e1,AAA e2 where e1.任务编号=e2.任务编号 and e1.企业编号=e2.企业编号 and e1.范围编号<>e2.范围编号
select 任务编号,企业编号 from 你的表 group by 任务编号,企业编号 having count(*)>1 and min(范围编号)<>max(范围编号)