Witam, pierwszy post więc witam się.
Teraz problem. Potrzebuję pomocy w skonstruowaniu zapytania tsql, które zrobi następującą rzecz:
Mam kilka tabel
Exams
UserExams
UserExamQuestions
UserExamAnswers
Users
ExamQuestions
ExamQuestionAnswers
a poniżej jest zapytanie, które wysmażyłem
select ue.DateStarted as 'Date Started', u.LastName as 'Lastname',
u.FirstName as 'Firstname', eq.Text as 'Question', eqa.Text as 'Answer',
eqa.IsCorrect as 'Correct' from Exams e
join UserExams ue on ue.ExamId = e.Id
join UserExamQuestions ueq on ueq.UserExamId = ue.Id
join UserExamAnswers uea on uea.UserExamQuestionId = ueq.Id
join Users u on u.Id = ue.UserId
join ExamQuestions eq on eq.Id = ueq.ExamQuestionId
join ExamQuestionAnswers eqa on eqa.Id = uea.ExamQuestionAnswerId
where e.Id = 10 and uea.IsSelected = 1
order by u.LastName, u.FirstName
działa, ale zwraca dane w poniższej postaci
Date Started Lastname Firstname Question Answer Correct
2012-02-26 13:29:50.770 Somename Somefirstname Some question text? Some answer 0
2012-02-26 13:30:20.000 Othername Otherfirstname Some question text? Some answer 0
2012-02-26 15:10:10.212 Fifth Fifthname Some question text? Other answer 1
oczywiście dla trzech różnych użytkowników, z których każdy odpowiedział na jedno pytanie, zaznaczając jakąś odpowiedź. Chciałbym, żeby docelowe zapytanie zwracało taką strukturę jak poniżej:
Lastname Firstname [Some question text?] Correct
Somename Somefirstname Some answer 0
Othername Otherfirstname Some answer 0
Fifth Fifthname Other answer 1
Czy to jest w ogóle możliwe? Nie musi być bardzo szybkie, chodzi o wygenerowanie wyników egzaminu. Zrobienie tego w kodzie aplikacji będzie problematyczne. Próbowałem używać pivot, ale primo - nie wydaje mi się, żebym rozumiał tę funkcję na tyle, żeby jej użyc, secundo - nie chcę agregować danych (a przynajmniej tak mi sie wydaje), a bez sum() pivot nie badzo chce działać.
Z góry dziękuję za wszelkie wskazówki.