2017-09-18 20 views
-1

我需要在SQL Server中用循环定义一个存储过程,以在旧的和最新的产品代码之间创建一个桥表。我不是SQL专家,我遇到了一些麻烦......循环更新SQL存储过程

我已经有一个包含所有产品代码更改的源表,但是,我需要创建包含所有OLD产品关系的表代码与最新的产品代码。

源表是这样的:

PRD_OLD ---- PRD_NEW 
00001   ---- 00003 
00002   ---- 00003 
00003   ---- 00004 
00004   ---- 00005 
00006   ---- 00007 

它可以看出,产品1和2对应于产物3.然后3对应于4,然后4对应于5,因此对于1的最新产品ID ,2,3和4应5.

输出表然后应该是:

PRD_OLD ---- PRD_NEW 
00001   ---- 00005 
00002   ---- 00005 
00003   ---- 00005 
00004   ---- 00005 
00006   ---- 00007 

注:在我的表中的代码与字母和数字(GUIDS)因此使用最大值码将无法正常工作...

任何人都可以帮忙吗?

谢谢!

回答

1

您可以用递归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;