sql server komplexe Abfrage

SQL SERVER

1. Eins ist die Quellentabelle und 2. ist die Zieltabelle, also in der 2. Tabelle mit unpivot die 12-Monats-Spalten, die in einzelne Spalte und YTD-Feld umgewandelt werden, sollten automatisch aktualisiert werden. Wenn der Monatsname Jan ist, bedeutet das YTD-Feld nur Jan-data, wenn es Feb ist, wird es die Jan-data mit Feb-data hinzufügen. Gleiches, wenn es Dez bedeutet, wird es von Jan bis Dez der gleichen Zeile hinzufügen.

Verwenden Sie cross apply(values ...) , um Ihre data zu deaktivieren:

 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) 

Wählen Sie einfach alle Ihren Monat einzeln und dann UNION sie:

 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 .... 

Du hast die Idee

Sieht aus wie das, was Sie benötigen, ist unpivot wie unten zu tun:

 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