SQL Server - tabela przestawna?

0

Witam,

Mam następujący problem, zrobiłem w Pentaho transformację, która pobiera z kliku usług dane, jeden Json zwraca w polu Amount_planned kilka rekordów
[{"amount":"65","year":2019,"month":2},{"amount":"80","year":2018,"month":12},{"amount":"60","year":2019,"month":1}] po zapisaniu danych do bazy tworzone są osobne rekordy:

id pracownik project year month amount
c38af663-f579-4984-9bf5-8408722c3ba9 NULL 0c16e38c-57e0-474b-a7d3-ba870124a883 2018 12 80
c38af663-f579-4984-9bf5-8408722c3ba9 NULL 0c16e38c-57e0-474b-a7d3-ba870124a883 2019 1 60
c38af663-f579-4984-9bf5-8408722c3ba9 NULL 0c16e38c-57e0-474b-a7d3-ba870124a883 2019 2 65

Pytanie w jaki sposób zrobić, aby uzyskać jeden rekord pola id,pracownicy,project się nie powtarzały, a pola year, month i amount dodać jako kolejne kolumny, a nie wiersze. Próbował już zrobić z tego tabelę przestawną w Pentaho, ale nie otrzymałem zamierzonego rezultatu.

0

A skąd będziesz wiedział ile kolumn jest potrzebne? Znasz wejściowy model danych i wiesz, że tych rekordów per id,pracownik, projekt będzie nie więcej niż np. 2,3, 4,5, ... ?

0

Znam wejściowy model danych ponieważ zwraca mi do usługa, idea jest taka, że dla każdego użytkownika zwracany jest jeden rekord, natomiast w polu Amount_planned występują rekordy dla dla miesiąca + 1, miesiąca + 2. miesiąca + 3.

0

Wersja SQL a?

0
Panczo napisał(a):

Wersja SQL a?
SQL Server 2014

1
select * from (
	select
		row_number() over (partition by id,pracownik,project order by year,month) r,
		*,		
		year(dateadd(m,1,datefromparts(year,month,1))) year1,
		month(dateadd(m,1,datefromparts(year,month,1))) month1,
		lead(amount,1,0) over (partition by id,pracownik,project order by year,month) amount1,
		year(dateadd(m,2,datefromparts(year,month,1))) year2,
		month(dateadd(m,2,datefromparts(year,month,1))) month2,
		lead(amount,2,0) over (partition by id,pracownik,project order by year,month) amount2
	 from dt) x 
where 
	r=1

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=b239e05ba2330d009196265f9eb7121c

0 użytkowników online, w tym zalogowanych: 0, gości: 0