Cześć,
Napotkałem na pewien problem przy pisaniu zapytania. Przykładowo tabela zawiera relację użytkowników do odbytych przez nich szkoleń. Wiem że szkoleń jest maksymalnie cztery.
Struktura tabeli:
UserTrainingId int
UserId int
TrainingId int
TrainingDate date
chciałbym mieć dane w takiej postaci:
[UserId] [Training1Id] [Training1Date] [Training2Id] [Training2Date] [Training3Id] [Training3Date] [Training4Id] [Training4Date]
Czyli po prostu Id użytkownika i informacje o szkoleniach jakie odbył, jeśli nie odbył danego szkolenia powinny pojawić się NULL'e
napisałem takie zapytanie:
select *
from
(
select * from [TEST].[dbo].[UserTraining]
where TrainingId=1
) ut1
full join (
select * from [TEST].[dbo].[UserTraining]
where TrainingId=2
) ut2 on ut2.UserId = ut1.UserId
full join (
select * from [TEST].[dbo].[UserTraining]
where TrainingId=3
) ut3 on ut3.UserId = ut1.UserId
full join (
select * from [TEST].[dbo].[UserTraining]
where TrainingId=4
) ut4 on ut4.UserId = ut1.UserId
Ale nie jest ono dobre ze względu na złączenie. Wybiera zdecydowanie za dużo informacji, oraz jeśli użytkownik nie ma odbytego szkolenia o Id = 1, wówczas wstawiany jest NULL. Fakt robię select * więc na pewno będą wybierane inne kolumny niż podałem, ale z wylistowaniem kolumn sobie już poradzę. Większy mam problem ze złączeniami...
Proszę o pomoc, jakieś nakierowanie jak to zrobić? Może pivot byłby dobry?