2017-06-08 21 views
0

Ich habe zwei Tabellen, die eine Quelle ist und die andere Ziel ist.Datenprüfung zwischen Quelle und Ziel gemäß der Transformationsregel

Ich muss überprüfen, ob die Daten ordnungsgemäß entsprechend der Transformationslogik transformiert werden oder nicht. Hier

ist die Quelltabelle: EmpIn

empid year quarter amount 
5  2007 q1  100 
5  2007 q2  200 
5  2007 q3  300 
5  2007 q3  100 
5  2007 q4  50 
5  2007 q4  100 
5  2007 q4  150 

Zieltabelle nach der Transformation: EmpOut

empid year quarter amount sequence number 
5  2007  q1  100   0 
5  2007  q2  200   0 
5  2007  q3  300   0 
5  2007  q3  400   1 
5  2007  q4  50   0 
5  2007  q4  150   1 
5  2007  q4  300   2 

Transformation Logik ist: Wenn es eine andere Eingabe Betrag in Bezug auf gleiches Quartal und die Gleiches Jahr Der Betrag wird dem vorherigen Betrag hinzugefügt und die Sequenznummer wird im Ziel um 1 erhöht.

zum Beispiel in der Quelltabelle 2007 q3 haben wir zwei Mengen der ersten 300 wird zum Anschlag in Bezug auf das Ziel mit der Sequenznummer von Null dem nächsten Eintrag ist eine Ergänzung des vorherigen Menge, die 400 und die Sequenznummer wird um 1 erhöht. die gleiche Transformation passiert auch im vierten Quartal

Wir (I) müssen validieren, wenn die Daten ordnungsgemäß entsprechend dieser Logik in die Zieltabelle umgewandelt werden oder nicht.

Antwort

0

Ich denke, Sie können nicht nur den Transformationsalgorithmus validieren?

  • Fügen Sie ein Feld „original_amount“ in der Zieltabelle
  • Schleife über alle Zeilen mit Sequenz no> 0
  • den Betrag aus der ehemaligen Zeile subtrahieren (Sequenz nicht - 1) aus der Menge der aktuellen Zeile und das neue Feld aktualisieren, mit dem Ergebnis
  • aktualisiert das Feld mit der Menge der gleichen Zeile für Sequenz no = 0
  • Vergleichen Sie die beide Tabelle der Menge und amount_original

Wie so.

1
/*Creating dataset*/ 
create table #tmp1 (empid int, year int, quarter varchar(25), amount int) 
Insert into #tmp1 
select 5,2007,'q1',100 union 
select 5,2007,'q2',200 union 
select 5,2007,'q3',300 union 
select 5,2007,'q3',100 union 
select 5,2007,'q4',50 union 
select 5,2007,'q4',100 union 
select 5,2007,'q4',150 


/*Intermediate dataset*/ 
select 
    ROW_NUMBER() over(partition by empid,quarter order by amount) as ID 
    ,* 
Into 
    #tmp2 
from 
    #tmp1 order by 2,3,4 

/*Desired output dataset*/ 
select 
    a.empid 
    ,a.year 
    ,a.quarter 
    ,sum(b.amount) 
    , a.ID-1 as [sequence number] 
from #tmp2 a , #tmp2 b 
where 
    a.empid=b.empid 
and 
    a.year=b.year 
and 
    a.quarter=b.quarter 
and 
    a.ID>=b.ID 
group by 
    a.ID, 
    a.empid, 
    a.year, 
    a.quarter, 
    a.amount 
Order By 2,3,4,1 
+0

Überprüfen Sie, ob Ihr Zielergebnis mit der Ausgabe der obigen Abfrage validiert wird – Vigya

Verwandte Themen