SQL初学者求助有一道题不懂

Riani123 2018-04-01 04:41:38
表a
学号 姓名 班级 性别
100101001 张永立 计算机软件 男
100101002 刘晨 计算机应用 女
100101003 王小敏 计算机应用 女
100101004 王小敏 计算机应用 女
100101005 张学成 计算机软件 男
100101006 李明 计算机软件 男
100101007 李明 计算机应用 女
100101008 李明 计算机软件 男
100101009 李明 计算机软件 男
100101010 李小红 计算机应用 男
100101011 李小路 计算机软件 男



问题是要怎么样选出只有男生的班级[/b]
...全文
210 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
吉普赛的歌 版主 2018-04-09
引用 3 楼 wwfxgm 的回复:
[quote=引用 2 楼 yenange 的回复:]
DECLARE @t TABLE(
	[学号] varchar(10),
	[姓名] nvarchar(10),
	[班级] nvarchar(10),
	[性别] nchar(1)
)
INSERT INTO @t
		  SELECT '100101001','张永立','计算机软件','男'
UNION ALL SELECT '100101002','刘晨','计算机应用','女'
UNION ALL SELECT '100101003','王小敏','计算机应用','女'
UNION ALL SELECT '100101004','王小敏','计算机应用','女'
UNION ALL SELECT '100101005','张学成','计算机软件','男'
UNION ALL SELECT '100101006','李明','计算机软件','男'
UNION ALL SELECT '100101007','李明','计算机应用','女'
UNION ALL SELECT '100101008','李明','计算机软件','男'
UNION ALL SELECT '100101009','李明','计算机软件','男'
UNION ALL SELECT '100101010','李小红','计算机应用','男'
UNION ALL SELECT '100101011','李小路','计算机软件','男'

SELECT 班级 FROM @t b
WHERE NOT EXISTS(
	SELECT 1 FROM @t a WHERE a.班级=b.班级 and a.性别='女'
)
GROUP BY 班级

/*
班级
计算机软件
*/
版主。你这个测试数据自己一个一个打上去的吗?? 应该有什么技巧吧?能否透露一点?[/quote] 有一些可以批量替换, 比如 10 替换成 union all select '10
  • 打赏
  • 举报
回复
wwfxgm 2018-04-09
引用 2 楼 yenange 的回复:
DECLARE @t TABLE(
	[学号] varchar(10),
	[姓名] nvarchar(10),
	[班级] nvarchar(10),
	[性别] nchar(1)
)
INSERT INTO @t
		  SELECT '100101001','张永立','计算机软件','男'
UNION ALL SELECT '100101002','刘晨','计算机应用','女'
UNION ALL SELECT '100101003','王小敏','计算机应用','女'
UNION ALL SELECT '100101004','王小敏','计算机应用','女'
UNION ALL SELECT '100101005','张学成','计算机软件','男'
UNION ALL SELECT '100101006','李明','计算机软件','男'
UNION ALL SELECT '100101007','李明','计算机应用','女'
UNION ALL SELECT '100101008','李明','计算机软件','男'
UNION ALL SELECT '100101009','李明','计算机软件','男'
UNION ALL SELECT '100101010','李小红','计算机应用','男'
UNION ALL SELECT '100101011','李小路','计算机软件','男'

SELECT 班级 FROM @t b
WHERE NOT EXISTS(
	SELECT 1 FROM @t a WHERE a.班级=b.班级 and a.性别='女'
)
GROUP BY 班级

/*
班级
计算机软件
*/
版主。你这个测试数据自己一个一个打上去的吗?? 应该有什么技巧吧?能否透露一点?
  • 打赏
  • 举报
回复
卖水果的net 版主 2018-04-01

-- 试试这个 ,未测试
select 班级 
from t 
group by 班级 
having count(*) = sum(case when 性别 = '男' then 1 else 0 end)

  • 打赏
  • 举报
回复
吉普赛的歌 版主 2018-04-01
DECLARE @t TABLE(
	[学号] varchar(10),
	[姓名] nvarchar(10),
	[班级] nvarchar(10),
	[性别] nchar(1)
)
INSERT INTO @t
		  SELECT '100101001','张永立','计算机软件','男'
UNION ALL SELECT '100101002','刘晨','计算机应用','女'
UNION ALL SELECT '100101003','王小敏','计算机应用','女'
UNION ALL SELECT '100101004','王小敏','计算机应用','女'
UNION ALL SELECT '100101005','张学成','计算机软件','男'
UNION ALL SELECT '100101006','李明','计算机软件','男'
UNION ALL SELECT '100101007','李明','计算机应用','女'
UNION ALL SELECT '100101008','李明','计算机软件','男'
UNION ALL SELECT '100101009','李明','计算机软件','男'
UNION ALL SELECT '100101010','李小红','计算机应用','男'
UNION ALL SELECT '100101011','李小路','计算机软件','男'

SELECT 班级 FROM @t b
WHERE NOT EXISTS(
	SELECT 1 FROM @t a WHERE a.班级=b.班级 and a.性别='女'
)
GROUP BY 班级

/*
班级
计算机软件
*/
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2018-04-01 04:41
社区公告
暂无公告