关于分组判断值是否一致的sql语句编写

逗号xzlhs 2012-10-15 04:02:43
我想在mysql中实现如下要求的sql,
表a如下:
id settle_id status pay_amt
01 001 S 500
02 001 S 100
03 001 N 200
04 002 S 900
05 002 S 200

我想查询出相同settle_id下status全部为S的settle_id,如上表应该查出的记录是:002.
请问mysql中应该怎么实现。
...全文
257 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2012-10-15
  • 打赏
  • 举报
回复
if object_id('tb')is not NULL
drop table tb
go
create table tb(id varchar(100),settle_id varchar(100),status varchar(100),pay_amt varchar(100))
insert into tb
select '01','001','S','500' union
select '02','001','S','100' union
select '03','001','N','200' union
select '04','002','S','900' union
select '05','002','S','200'

--select * from tb
SELECT * FROM tb a WHERE status='S'
AND NOT EXISTS(SELECT 1 FROM tb WHERE settle_id=a.settle_id AND status<>a.status)

/*
id settle_id status pay_amt
04 002 S 900
05 002 S 200
*/
汤姆克鲁斯 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code
ELECT * FROM [tb] AS t WHERE [status]='S'
AND NOT EXISTS(SELECT 1 FROM tb WHERE [settle_id]=t.[settle_id] AND [status]!=t.[status])
[/Quote]
mysql 和mssql
都可以用
汤姆克鲁斯 2012-10-15
  • 打赏
  • 举报
回复
ELECT * FROM [tb] AS t WHERE [status]='S'
AND NOT EXISTS(SELECT 1 FROM tb WHERE [settle_id]=t.[settle_id] AND [status]!=t.[status])

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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