表一:部门表
id, name(id部门自加1id,name部门名称)
表二:子部门表
id,did,name(子部门自加1id,did是子部门关联部门id表示这个子部门是在那个部门下,name子部门名称)
表三:员工信息表
id did,name,zdept(其中did是关联的部门id表示员工是在哪个部门中,zdept是表示员工是否在子部门中,0表示不是,1表示是)如何用一条sql语句实现如下结果集?员工名称,员工所在部门名,员工所在子部门名例如 小明是在主部门市场部下,小红是在主部门 市场部 的子部门市场部小组1下,
应如下显示小明,市场部,空
小红,空,市场部小组1谢谢

解决方案 »

  1.   

    zdept是表示员工是否在子部门中,0表示不是,1表示是??
    怎么知道員工在哪個子部門呢?沒看懂
      

  2.   

    員工在哪個子部門,是关联的did,
    也就是表三中的did子段,如果zdept是0,did关联的是主部门中的id。zdept是1,did关联的是子部门的id
      

  3.   

    详细:
    1表:主部门表,子段 id,name
    其中id是不重复的自加1字段,name是部门名称
    2表:子部门表,字段 id,did,name
    其中id是不重复的自加1字段,did关联主部门的id,表示此子部门是在哪个主部门下的,name是子部门名称
    3表:员工资料表,字段id,did,name,zdept
    其中id是不重复的自加1字段,did是关联1表或者是2表的id,也就是说表示这个员工是在哪个部门下,至于did是关联表1(主部门表)还是关联表2(子部门表)要根据子段zdept来判断,
    如果zdept=0那么这里的did就是关联表1的id, 如果zdept=1那么这里的did就是关联表2的id我现在想用一句sql语言实现如下功能:表1:
      id ,   name
       1    市场部
    表2:
      id,did,   name   (这里的did是关联表1中的id的)
       1  1  市场部小组1 
    sql语句:select name from 表2 where did=(select id from 表1 where name='市场部')
    可以得到在市场部下的所有子部门信息
    表3:
       id,did, name, zdept
        1  1   小明    0
        2  1   小红    1实际情况是小明在主部门市场部下,小红在市场部的子部门市场部小组1中,在上边的三个表中可以反映出对应情况。现在想实现如下结果集:(一句sql语言) 所在部门,所在子部门 ,员工姓名
      市场部     ----         小明
      市场部   市场部小组1    小红
      

  4.   

    (select 表1.name as 所在部门,'' as 所在子部门,表3.name as 员工姓名
     from 表1,表3
     where 表1.id=表3.did and 表3.zdept=0 )UNION(select 表1.name as 所在部门,表2.name as 所在子部门,表3.name as 员工姓名
     from 表1,表2,表3
     where 表1.id=表2.did and 表2.id=表3.did and 表3.zdept=1)
      

  5.   

    不过,实际上还是两条语句,只不过进行了集合的或运算,我估计一条SQL语句可能没法完成
      

  6.   

    我的这个功能使用存储过程的:
    CREATE PROCEDURE dd AS
    declare @w int
    select @W=count(*)  from kehu_zl
    select @w
    GO
      

  7.   

    declare @bm table(id int, name char(10))
    declare @zbm table (id int,did int ,name char(10))
    declare @yg table (id int,did int, name char(10),zdept bit)insert @bm values(1,'bm1')
    insert @bm values(2,'bm2')
    insert @zbm values(1,2,'zbm1')
    insert @yg values(1,1,'yg1',1)
    insert @yg values(1,1,'yg2',0)select a.name,case when a.zdept=0 then b.name else ''  end bmName,
    case when a.zdept=1 then c.name else '' end zbmName
    from @yg a left join @bm b on a.did=b.id
    left join @zbm c on a.did=b.id