请SQL高手指教

royal0617 2012-08-25 09:34:09
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,求效率更高,更简单的语句
请高手指教,谢谢~
...全文
36 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
royal0617 2012-08-25
  • 打赏
  • 举报
回复
感谢2楼的回复,我受益匪浅,谢谢指教~
人生无悔 2012-08-25
  • 打赏
  • 举报
回复

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 行受影响)
*/
tian790317 2012-08-25
  • 打赏
  • 举报
回复
学习中,感谢楼主这么好的帖子,多谢!

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧