第一个是源表,第二个是目标表,因此在第二个表中使用unpivot将12个月的列转换为单列,YTD字段应自动更新。如果月份名称为Jan,则表示YTD字段仅为Jan数据,如果为2月,则表示将使用Feb数据添加Jan数据。如果它是Dec则表示它将从同一行的Jan到Dec添加。
答案 0 :(得分:1)
使用cross apply(values ...)
取消对数据的取消投放:
select
t.[oru code]
, t.[bg name]
, t.[bu name]
, t.[domain]
, t.KPI
, t.UoM
, t.[Year]
, t.[ACT/TARGET]
, v.[Month]
, v.KPI
, t.[YTD/ITM]
from t
cross apply (values
('Jan',Jan) ,('Feb',Feb) ,('Mar',Mar)
,('April',April) ,('May',May) ,('Jun',Jun)
,('Jul',Jul) ,('Aug',Aug) ,('Sep',Sep)
,('Oct',Oct) ,('Nov',Nov) ,('Dec',Dec)
) v ([Month],KPI)
答案 1 :(得分:0)
只需选择所有月份,然后选择UNION:
select [ORU code], [BG Name], YEAR, 'Jan' as [Month], [Jan] as [KPI #], [Jan]
as [YTD/ITM] from source_table
union all
select [ORU code], [BG Name], YEAR, 'Feb' as [Month], [Feb] as [KPI #], [Jan]+
[Feb] as [YTD/ITM] from source_table
union all
select ....
你得到了想法
答案 2 :(得分:0)
看起来你需要的是如下所示进行拆卸:
Select *, [YTD] = sum(yourYTD calculation column) over(partition by [OruCode],[year] order by Month) from (
Select OruCode, BGName ---your required columns upto dec
from table1 t1 cross join table2 t2
)
unpivot (KPINo for [Month] in ([Jan],[Feb]...) ) p