表一:部门表
id, name(id部门自加1id,name部门名称)
表二:子部门表
id,did,name(子部门自加1id,did是子部门关联部门id表示这个子部门是在那个部门下,name子部门名称)
表三:员工信息表
id did,name,zdept(其中did是关联的部门id表示员工是在哪个部门中,zdept是表示员工是否在子部门中,0表示不是,1表示是)如何用一条sql语句实现如下结果集?员工名称,员工所在部门名,员工所在子部门名例如 小明是在主部门市场部下,小红是在主部门 市场部 的子部门市场部小组1下,
应如下显示小明,市场部,空
小红,空,市场部小组1谢谢
id, name(id部门自加1id,name部门名称)
表二:子部门表
id,did,name(子部门自加1id,did是子部门关联部门id表示这个子部门是在那个部门下,name子部门名称)
表三:员工信息表
id did,name,zdept(其中did是关联的部门id表示员工是在哪个部门中,zdept是表示员工是否在子部门中,0表示不是,1表示是)如何用一条sql语句实现如下结果集?员工名称,员工所在部门名,员工所在子部门名例如 小明是在主部门市场部下,小红是在主部门 市场部 的子部门市场部小组1下,
应如下显示小明,市场部,空
小红,空,市场部小组1谢谢
解决方案 »
- 请大家帮忙看一段程序.我想在richedit中选中某行,然后将其颜色改变的.有点问题.谢谢!
- 窗体间的控件控制?
- 想找一两个毕业生!
- 连接串使用udl文件是不是不安全,程序发布打包时udl一般放在什么地方比较安全?
- 为什么我在下面这段代码上设置断点后,程序一运行,断点前面就边成一把小叉,而且根本就没有执行到这里来?
- 如何在sql2000里將其中一部分數据剪切出來喲
- csdn的结帖率极低,很多问题明显已经解决了。。。。。
- 如何从一个文本文件生成动态菜单?
- 怎么样将一个表中的相应字段的数据写到另一个表中去??高分奉送!
- 如何用DELPHI向INTERBASE数据库添加数据???抓虫呀,用在SQL中没问题,在IB中就是不可以。
- 请问各位高手,如何在字符串中删除制定的字符,在线等待。
- 局部array of string用完是否需要手动释放释放每个成员的内存?a[i]:=''?
怎么知道員工在哪個子部門呢?沒看懂
也就是表三中的did子段,如果zdept是0,did关联的是主部门中的id。zdept是1,did关联的是子部门的id
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 小红
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)
CREATE PROCEDURE dd AS
declare @w int
select @W=count(*) from kehu_zl
select @w
GO
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