我需要在SQL Server中定义一个带有循环的存储过程,以在旧产品代码和最新产品代码之间创建桥接表。我不是SQL的专家,我遇到了一些麻烦......
我已经有一个包含所有产品代码更改的源表,但是,我需要创建包含所有OLD产品代码与最新产品代码的关系的表。
源表格如下:
PRD_OLD ---- PRD_NEW
00001 ---- 00003
00002 ---- 00003
00003 ---- 00004
00004 ---- 00005
00006 ---- 00007
可以看出,产品1和2对应于产品3.然后3对应于4然后4对应于5,因此1,2,3和4的最新产品ID应为5.
输出表应为:
PRD_OLD ---- PRD_NEW
00001 ---- 00005
00002 ---- 00005
00003 ---- 00005
00004 ---- 00005
00006 ---- 00007
注意:在我的表中,代码是包含字母和数字的代码(GUIDS),因此使用最大值将无效...
有人可以帮忙吗?
谢谢!
答案 0 :(得分:2)
您可以使用递归CTE执行此操作:
with cte as (
select prd_old, prd_new, 1 as lev
from source
union all
select cte.prd_old, s.prd_new, lev + 1
from cte join
source s
on cte.prd_new = s.prd_old
)
select t.*
from (select cte.*, max(lev) over (partition by prd_old) as max_lev
from cte
) t
where lev = max_lev;