create table tmp_table(
id varchar2(10),
name varchar2(40),
flag varchar2(1)
)创建表的语句。数据
insert into tmp_table (ID, NAME, FLAG) values ('1', '小明', '0');
insert into tmp_table (ID, NAME, FLAG) values ('2', '小明', '1');
insert into tmp_table (ID, NAME, FLAG) values ('4', '小华', '0');
insert into tmp_table (ID, NAME, FLAG) values ('5', '小强', '1');
insert into tmp_table (ID, NAME, FLAG) values ('6', '小玲', '1');
insert into tmp_table (ID, NAME, FLAG) values ('7', '小红', '0');
insert into tmp_table (ID, NAME, FLAG) values ('8', '小红', '1');
现在想查询出来的数据是
小明 和小红。
因为小明和小红的flag 标记既有‘0’,也有‘1’。求这样一个语句。
其他的人员要么只有‘1’,要么只用‘0’。
id varchar2(10),
name varchar2(40),
flag varchar2(1)
)创建表的语句。数据
insert into tmp_table (ID, NAME, FLAG) values ('1', '小明', '0');
insert into tmp_table (ID, NAME, FLAG) values ('2', '小明', '1');
insert into tmp_table (ID, NAME, FLAG) values ('4', '小华', '0');
insert into tmp_table (ID, NAME, FLAG) values ('5', '小强', '1');
insert into tmp_table (ID, NAME, FLAG) values ('6', '小玲', '1');
insert into tmp_table (ID, NAME, FLAG) values ('7', '小红', '0');
insert into tmp_table (ID, NAME, FLAG) values ('8', '小红', '1');
现在想查询出来的数据是
小明 和小红。
因为小明和小红的flag 标记既有‘0’,也有‘1’。求这样一个语句。
其他的人员要么只有‘1’,要么只用‘0’。
where a.name = b.name
and ((a.flag = 0 and b.flag = 1)
or (a.flag = 1 and b.flag = 0));
select t.name
from(select name , count(*)-sum(flag) c1,count(*) c2 from tmp_table group by name)t
where t.c1<>t.c2 and t.c1>0
全是 1 count(*)-sum(flag)=0
全是 0 count(*)-sum(flag)=count(*)
排除剩下的
SELECT t.NAME FROM t
GROUP BY t.NAME
HAVING SUM(DECODE(t.flag,'0',1,0)) > 0 AND SUM(DECODE(t.flag,'1',1,0)) > 0
所以这样最简单吧
select name from (select t.name,count(1) from TMP_TABLE t having count(1)>1 group by t.name)