我有两个表,一个是源,另一个是目标。
我需要根据转换逻辑检查数据是否正确转换。
这是源表: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
转型后的目标表: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
转换逻辑是:如果相同的季度和同一年有另一个金额条目 金额将被添加到之前的金额,并且目标中的序列号将增加1.
例如在2007年q3的源表中,我们有两个金额,第一个是300,它将按原样与序列号的目标进行比较 零 下一个条目是前一个金额的加法,即400,序列号加1。 同样的转变也发生在第四季度
我们(I)需要验证数据是否根据此逻辑正确转换到目标表。
答案 0 :(得分: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
答案 1 :(得分:0)
我想你不能只是验证转换算法吗?
喜欢这样。