2017-06-08 1 views
0

J'ai deux tables dont l'une est source et l'autre cible.Vérification des données entre la source et la cible selon la règle de transformation

Je dois vérifier si les données sont correctement transformées selon la logique de transformation ou non.

Voici la table source: 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 

table cible après la 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 

logique de transformation est la suivante: Si une autre entrée de montant par rapport au même trimestre et la la même année le montant sera ajouté au montant précédent et le numéro de séquence sera augmenté de 1 dans la cible.

par exemple dans la table source en 2007 q3, nous avons deux montants le premier est 300, il ira est à la cible avec le numéro de séquence de zéro l'entrée suivante est un ajout au montant précédent qui est 400 et le numéro de séquence est augmenté de 1. la même transformation se produit au quatrième trimestre également

Nous (I) besoin de valider si les données sont correctement transformées selon cette logique à la table cible ou non.

Répondre

0

Je suppose que vous ne pouvez pas simplement valider l'algorithme de transformation?

  • Ajouter un champ « original_amount » dans la table de destination
  • Boucle sur toutes les lignes avec la séquence no> 0
  • Soustraire le montant de la première rangée (séquence n - 1) à partir de la quantité de la ligne en cours et mettre à jour le nouveau champ avec le résultat
  • Mise à jour sur le terrain avec la quantité de la même ligne pour la séquence non = 0
  • Comparez les deux la quantité de table et amount_original

Comme ça.

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

cochez pour valider votre résultat cible avec la sortie de la requête ci-dessus – Vigya