日期:2014-05-17  浏览次数:20437 次

请SQL高手指教
1张表内容如下:
假设表明为TEMP
ID NAME STATUS
1 A 0
2 A 1
3 A 0
4 B 1
5 B 1
6 C 1
需求如下:
3个字段内容都需要,相同NAME只取一条记录,ID作为主键与其他表关联,条件为STATUS全部为1才取出唯一NAME的记录,如果其中有1条记录STATUS为0,在下表中就不显示该条记录,也就是说上表输出结果为:
ID NAME STATUS
4 B 1
6 C 1

我自己能想出来的只有以子表形式,然后用NOT IN或者NOT EXISTS,求效率更高,更简单的语句
请高手指教,谢谢~

------解决方案--------------------
SQL code

with TEMP(ID,NAME,STATUS) as
(
select 1,'A',0
union all select 2,'A',0
union all select 3,'A',1
union all select 4,'B',1
union all select 5,'B',1
union all select 6,'C',1
)
select min(ID) ID,NAME,max(STATUS) STATUS from TEMP
group by NAME
having min(STATUS)=1
/*
ID          NAME STATUS
----------- ---- -----------
4           B    1
6           C    1

(2 行受影响)
*/