2017-09-18 2 views
-1

Ich muss eine gespeicherte Prozedur InSQL Server mit einer Schleife definieren, um eine Brückentabelle zwischen alten und neuesten Produktcodes zu erstellen. Ich bin kein Experte in SQL und ich habe einige Probleme ...Loopupdate SQL gespeicherte Prozedur

Ich habe bereits eine Quellentabelle, die alle Produktcodes Änderungen enthält, aber ich muss die Tabelle erstellen, die die Beziehung aller OLD-Produkt enthält Codes mit dem NEUESTEN Produktcode.

Die Quelltabelle ist wie:

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

Es ist ersichtlich, dass die Produkte 1 und 2 entsprechen Produkt 3. Dann 3 bis 4 entspricht, und dann 4 entspricht 5, so dass die neueste Produkt-ID 1

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

Anmerkung::, 2, 3 und 4 sollen 5.

die Ausgabetabelle dann sollte sein, in meiner Tabelle Die Codes sind Codes sowohl mit Buchstaben und Zahlen (GUIDs) so unter Verwendung von Maxima wird nicht funktionieren ...

Kann mir jemand helfen?

Danke!

Antwort

1

Sie können dies mit einem rekursiven 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;