求一sql的写法

lk829 2010-06-27 12:33:55
Name subject
张三 语文
张三 数学
张三 外语
张三 物理
李四 数学
李四 语文
李四 外语
王五 物理
赵六 数学
陈七 外语
陈七 语文
陈七 数学
钱八 地理
钱八 语文
-------
1 如何显示同时选了语文 数学 外语的学生
2 如何显示同时只选了语文 数学 外语的学生
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lk829 2010-06-27
  • 打赏
  • 举报
回复
呵呵 不好意思 可能题目还没有说清楚
1显示的结果是
张三 语文
张三 数学
张三 外语
李四 数学
李四 语文
李四 外语
陈七 外语
陈七 语文
陈七 数学
2显示的结果
李四 数学
李四 语文
李四 外语
陈七 外语
陈七 语文
陈七 数学

luoyoumou 2010-06-27
  • 打赏
  • 举报
回复
select t1.name,count(t1.subject) from tb t1
where exists ( select 1 from tb t2 where t2.name=t1.name
and t2.subject in ('语文','数学','外语')
having count(subject)=3 )
group by t1.name
having count(t1.subject)=3;


-- 只....
luoyoumou 2010-06-27
  • 打赏
  • 举报
回复
select distinct name from tb t1
where exists ( select 1 from tb t2 where t2.name=t1.name
and t2.subject in ('语文','数学','外语')
having count(subject)=3 );
dawugui 2010-06-27
  • 打赏
  • 举报
回复
--1 如何显示同时选了语文 数学 外语的学生

select * from tb where name in
(
select name from
(
select distinct name from tb where subject = '语文'
union all
select distinct name from tb where subject = '数学'
union all
select distinct name from tb where subject = '外语'
) t
group by name having count(1) >= 3
)

--2 如何显示同时只选了语文 数学 外语的学生

select * from tb where name in
(
select name from
(
select distinct name from tb where subject = '语文'
union all
select distinct name from tb where subject = '数学'
union all
select distinct name from tb where subject = '外语'
) t
group by name having count(1) = 3
)
jianuMan 2010-06-27
  • 打赏
  • 举报
回复

use test
go
drop table #score
go
create table #score
(
Name varchar(100),
subject varchar(100)
)
go

insert into #score values('张三', '语文')
insert into #score values('张三', '数学')
insert into #score values('张三', '外语')
insert into #score values('张三', '物理')
insert into #score values('李四', '数学')
insert into #score values('李四', '语文')
insert into #score values('李四', '外语')
insert into #score values('王五', '物理')
insert into #score values('赵六', '数学')
insert into #score values('陈七', '外语')
insert into #score values('陈七', '语文')
insert into #score values('陈七', '数学')
insert into #score values('钱八', '地理')
insert into #score values('钱八', '语文')
go

select name from #score
where subject in ('语文', '数学', '外语')
group by name
having count(subject) = 3
go ---- 显示同时选 语文 数学 外语 三门课的人

select distinct name from #score
where name not in (
select name from #score
where subject not in ('语文', '数学', '外语')
group by name)
--- 显示只选择 语文 数学 外语 三种课的学生

22,210

社区成员

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

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