学员表
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语句吗,存储过程也可以的。

解决方案 »

  1.   

    select 学员ID,  岗位ID   学习的课程ID from
    学员表  LEFT OUTER JOIN 岗位表 On ***
     LEFT OUTER JOIN 岗位需要学习课程表 On ****
    LEFT OUTER JOIN 课程表 On ***
      

  2.   

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

  3.   

    select 学员ID,岗位ID from 学员学习情况表 group by 学员ID,岗位ID having sum(通过情况)=(select count(0) from 岗位需要学习课程表 where 岗位ID=学员学习情况表.岗位ID) 不知道这个行不行~
      

  4.   

    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是你要查的岗位
      

  5.   

    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因为此查询是基于一个假设:学员不学习与岗位无关的课程
      

  6.   

    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是你要查的岗位
      

  7.   

    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是你要查的岗位
      

  8.   

    在sqlserver里面写几个自定义函数
      

  9.   

    select * from 学员学习情况表 a join 学员学习情况表 b on a.学员ID=b.学员ID join 岗位需要学习课程表 c on a.岗位ID=c.岗位ID where a.通过情况 = 1
      

  10.   

    smile9961(good life)的只要把x.课程ID 改为x.学习的课程ID就可以用了。
    005的限制条件,我可能通过其他程序来控制。
    谢谢各位了。