2017-09-18 11 views
-1

古い製品コードと最新の製品コードの間にブリッジ・テーブルを作成するためにループを使用してSQL Serverのストアド・プロシージャを定義する必要があります。私はSQLの専門家ではありませんし、いくつかの問題を抱えています...ループ・アップデートSQLストアド・プロシージャ

私はすでにすべての製品コードの変更を含むソーステーブルを持っていますが、すべてのOLD製品の関係を含むテーブルを作成する必要があります最新の製品コードのコード

ソーステーブルは次のようである:

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

製品3に製品1及び2相当する。そして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; 
関連する問題