有朋友帮忙写一条SQL查询语句吗,存储过程也行(SQLSERVER2000)

daishengs 2006-11-02 11:23:42
学员表
ID 姓名 性别 单位
1 人员1 男 单位1
2 人员2 女 单位2

岗位表
ID 岗位名称
1 仓库管理
2 普通文员

课程表
ID 课程名称
1 英语
2 政治
3 其他公共课
4 仓管
5 质保
6 写作

岗位需要学习课程表
岗位ID 课程ID
1 1
1 3
1 4
1 5
2 1
2 2
2 3
2 6

学员学习情况表(一个视图)
学员ID 岗位ID 学习的课程ID 通过情况(1为通过)
1 1 1 1
1 2 1 0
1 1 3 1
1 1 4 1
1 1 5 1
2 2 1 1
2 2 2 1
2 2 3 1
2 2 6 0
2 1 3 1

现在要查的要求是,查出指定岗位要学习的课程已经全部通过的学员名单
比如仓库管理岗位已经全部通过的学员是人员1
哪位朋友可以帮忙写一段SQL语句吗,存储过程也可以的。
...全文
191 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jedliu 2006-11-02
  • 打赏
  • 举报
回复
select * from 学员学习情况表 a join 学员学习情况表 b on a.学员ID=b.学员ID join 岗位需要学习课程表 c on a.岗位ID=c.岗位ID where a.通过情况 = 1
sunjay117 2006-11-02
  • 打赏
  • 举报
回复
在sqlserver里面写几个自定义函数
lucky_yyx 2006-11-02
  • 打赏
  • 举报
回复
select * from
(
select x.学员ID, count(1) as 通过课程数
from 学员学习情况表 x
join
(
select 岗位ID, 课程ID from 岗位需要学习课程表 where 岗位ID= @岗位ID
) y
on x.岗位ID = y.岗位ID and x.课程ID = y.课程ID
where x.通过情况 = 1
group by x.学员ID
) w
where w.通过课程数 = (select count(1) from 岗位需要学习课程表 where 岗位ID= @岗位ID )


@岗位ID是你要查的岗位
smile9961 2006-11-02
  • 打赏
  • 举报
回复
select * from
(
select x.学员ID, count(1) as 通过课程数
from 学员学习情况表 x
join
(
select 岗位ID, 课程ID from 岗位需要学习课程表 where 岗位ID= @岗位ID
) y
on x.岗位ID = y.岗位ID and x.课程ID = y.课程ID
where x.通过情况 = 1
group by x.学员ID
) w
where w.通过课程数 = (select count(1) from 岗位需要学习课程表 where 岗位ID= @岗位ID )


@岗位ID是你要查的岗位
Eddie005 2006-11-02
  • 打赏
  • 举报
回复
select 学员ID,岗位ID from 学员学习情况表 group by 学员ID,岗位ID having sum(通过情况)=(select count(0) from 岗位需要学习课程表 where 岗位ID=学员学习情况表.岗位ID)

这个已经测试过,但是有一定的应用条件,要求学员学员学习情况表不能出现下面的记录:
学员ID 岗位ID 学习的课程ID 通过情况(1为通过)
1 1 6 1

因为此查询是基于一个假设:学员不学习与岗位无关的课程
DePaul 2006-11-02
  • 打赏
  • 举报
回复
SELECT 姓名,性别 ,单位 FROM 学员表 x INNER JOIN 学员学习情况表 a ON x.ID=a.学员ID INNER JOIN 岗位需要学习课程表 b on a.岗位ID=b.岗位ID and b.岗位ID=@岗位ID
WHERE EXISTS(SELECT 学员ID FROM 学员学习情况表 WHERE 通过情况<>0 AND 学员ID=a.学员ID)

@岗位ID是你要查的岗位
hegang888888888 2006-11-02
  • 打赏
  • 举报
回复
顺路学习
daishengs 2006-11-02
  • 打赏
  • 举报
回复
谢谢各位了,吃了饭,我回来测试一下,然后结帐买单,哈哈。
daishengs 2006-11-02
  • 打赏
  • 举报
回复
学员表里没有岗位ID,学员可以学习多个岗位
cansum396 2006-11-02
  • 打赏
  • 举报
回复
学员表里没有岗位ID的?
Eddie005 2006-11-02
  • 打赏
  • 举报
回复
select 学员ID,岗位ID from 学员学习情况表 group by 学员ID,岗位ID having sum(通过情况)=(select count(0) from 岗位需要学习课程表 where 岗位ID=学员学习情况表.岗位ID)

不知道这个行不行~
lytone52 2006-11-02
  • 打赏
  • 举报
回复
帮lz顶吧,水平一般,没有环境,友情帮顶了
rickjelly2004 2006-11-02
  • 打赏
  • 举报
回复
因为 学习的课程ID 唯一

select 学员ID from (
select 学员ID,岗位ID,count(学习的课程ID) shumu from 学员学习情况表 group by 学员ID,岗位ID
where 通过情况=1) t1
where shumu=(select count(*) from 课程表)

7712190 2006-11-02
  • 打赏
  • 举报
回复
select 学员ID, 岗位ID 学习的课程ID from
学员表 LEFT OUTER JOIN 岗位表 On ***
LEFT OUTER JOIN 岗位需要学习课程表 On ****
LEFT OUTER JOIN 课程表 On ***
daishengs 2006-11-02
  • 打赏
  • 举报
回复
smile9961(good life)的只要把x.课程ID 改为x.学习的课程ID就可以用了。
005的限制条件,我可能通过其他程序来控制。
谢谢各位了。

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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