【发布时间】:2020-09-15 21:24:31
【问题描述】:
我有一个具有以下值的表
userid roleid ranklvl
123 a 1
456 b 2
789 c 3
我需要以上格式的输出数据:
userid roleid ranklvl parentroleid
123 a 1 null
456 b 2 a
789 c 3 b
在此先感谢您提供任何指导。
编辑: 我使用了 while 循环方法来实现这一点,但试图避免 while 循环。
declare @a table
(
userid int,roleid char(1),ranklvl int,parentroleid char(1) )
insert into @a(userid,roleid,ranklvl) select userid,roleid,ranklvl from Table [where some condition]
declare @maxcount smallint = (select max(ranklvl) from @a)
declare @counter smallint = 1
declare @parentroleid char(1)
while( @maxcount > @counter)
BEGIN
Select @parentroleid = roleid from @a where ranklvl = @maxcount - 1
UPDATE @a SET parentrole = @parentroleid where ranklvl = @maxcount
SET @maxcount = @maxcount -1
END
select * from @a
如果ranklvl 的正确序列对于给定的记录集(如 1->2->3)存在,则 while 循环逻辑起作用。但如果数据采用以下方式,它就不起作用:
userid roleid ranklvl
123 a 1
789 c 3
以下预期结果不是由 while 循环逻辑得出的。
userid roleid ranklvl parentroleid
123 a 1 null
789 c 3 a
【问题讨论】:
-
请向我们展示您的尝试。
-
看看
JOIN。
标签: sql sql-server left-join sql-server-2017