输入职位的编号得到它下属的职位

SQL存储过程
本文介绍了一个SQL存储过程的设计与实现,该过程用于递归查询下属职位信息。通过创建临时表并利用循环不断扩展查询范围,最终返回所有指定职位的下属职位编号及名称。

创建一个表,包含三列--编号、职位名称、上级职位编号

CREATE TABLE [dbo].[Table1] (
 [ID] [smallint] IDENTITY (1, 1) NOT NULL ,
 [Name] [varchar] (40) , [SuperPosition] [smallint] NULL
)

创建存储过程

drop proc jayjay
go
create proc jayjay
 @pid int
as
DECLARE @ids VARCHAR(2000)
DECLARE @tmpids VARCHAR(2000)
DECLARE @oldids VARCHAR(2000)
DECLARE @sql nVARCHAR(2000)
set @ids=''
set @tmpids=''
set @oldids=''

SELECT @ids=@ids+CONVERT(VARCHAR,id)+','
FROM dbo.Table1
WHERE superPosition=@pid and superPosition<>ID

IF len(@ids)>0
 SET @ids=left(@ids,len(@ids)-1)

CREATE TABLE #Position(id int)
SET @oldids = @ids

while len(@oldids)>0
begin
 SET @sql=N'INSERT INTO #Position
   SELECT id
   FROM Table1
   WHERE superPosition in (' + @oldids +')'
 EXEC (@sql)
 SET @tmpids=''
 SELECT  @tmpids = @tmpids + CONVERT(VARCHAR,id) + ','
 FROM #Position
 IF LEN(@tmpids)>0
  SET @tmpids = LEFT(@tmpids,LEN(@tmpids)-1)
 SET @oldids = @tmpids
 DELETE FROM #Position
 SET @ids=@ids+','+@tmpids
end
IF LEN(@ids)>0
 BEGIN
  SET @ids = LEFT(@ids,LEN(@ids)-1)  
  SET @sql =N'SELECT ID,Name FROM Table1 WHERE ID in (' + @ids + ')'
  PRINT @sql
  EXEC(@sql)
 END
ELSE
 SELECT ID FROM CRM_PUB_Position WHERE 1=2

执行存储过程。
exec jayjay 8

下属职位编号和名称全部显示

工作沟通 题目描述 某公司有 N N 名员工编号从 0 0 至 N − 1 N−1。其中,除了 0 0 号员工是老板,其余每名员工都有一个直接领导。我们假设编号为 i i 的员工的直接领导是 f i f i ​ 。 该公司有严格的管理制度,每位员工只能受到本人或直接领导或间接领导的管理。具体来说,规定员工 x x 可以管理员工 y y,当且仅当 x = y x=y,或 x = f y x=f y ​ ,或 x x 可以管理 f y f y ​ 。特别地, 0 0 号员工老板只能自我管理,无法由其他任何员工管理。 现在,有一些同事要开展合作,他们希望找到一位同事来主持这场合作,这位同事必须能够管理参与合作的所有同事。如果有多名满足这一条件的员工,他们希望找到编号最大的员工。你能帮帮他们吗? 输入格式 第一行一个整数 N N,表示员工的数量。 第二行 N − 1 N−1 个用空格隔开的正整数,依次为 f 1 , f 2 , … f N − 1 f 1 ​ ,f 2 ​ ,…f N−1 ​ 。 第三行一个整数 Q Q,表示共有 Q Q 场合作需要安排。 接下来 Q Q 行,每行描述一场合作:开头是一个整数 m m( 2 ≤ m ≤ N 2≤m≤N),表示参与本次合作的员工数量;接着是 m m 个整数,依次表示参与本次合作的员工编号(保证编号合法且不重复)。 保证公司结构合法,即不存在任意一名员工,其本人是自己的直接或间接领导。 输出格式 输出 Q Q 行,每行一个整数,依次为每场合作的主持人选。 输入数据 1 5 0 0 2 2 3 2 3 4 3 2 3 4 2 1 4 输出数据 1 2 2 0 输入数据 2 7 0 1 0 2 1 2 5 2 4 6 2 4 5 3 4 5 6 4 2 4 5 6 2 3 4 输出数据 2 2 1 1 1 0 提示 样例解释 1 对于第一场合作,员工 3 , 4 3,4 有共同领导 2 2,可以主持合作。 对于第二场合作,员工 2 2 本人即可以管理所有参与者。 对于第三场合作,只有 0 0 号老板才能管理所有员工。 数据范围 对于 50 % 50% 的测试点,保证 N ≤ 50 N≤50。 对于所有测试点,保证 3 ≤ N ≤ 300 3≤N≤300, Q ≤ 100 Q≤100。 c++代码实现
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值