Мне нужно перечислить ответы на опрос в одну строку.В таблице ответов на опросы перечислены queryID и ResponseID (это вопросы с несколькими вариантами ответов), поэтому по одной строке для каждого ответа.Есть 12 вопросов.Такие вещи, как дата ответа, работник, который проводил опрос, и работник, который вошел в опрос, хранятся в других таблицах.
Итак, у меня есть запрос, который получает ответы для одного опроса в 12 строк.Теперь мне нужно собрать все это в один ряд.Pivot, верно?
Но я так и не смог заставить его работать.:-( Пробовал несколько решений с этого и других форумов (включая документацию Микки здесь: https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017).
Затем я нашел это решение, которое вообще не использует сводку, здесь: Группировка сводных таблиц SQL
Отлично сработало, но в примере есть только два вопроса. В некоторых наших опросах будет более 50 вопросов, поэтому я предполагаю, что это не будет очень элегантным решением.
Итак, я вернулся к своей основной проблеме.
Уровень опыта находится где-то между идиотом и новичком, так что я, вероятно, упускаю что-то очевидное.
Вот запрос сам по себе (работает какОжидается):
SELECT AssessmentResponses.ID, AssessmentQuestions.QuestionNumber,
AssessmentResponseAnswers.QuestionID,
AssessmentAnswerChoices.AnswerChoiceNumber
FROM (AssessmentResponses RIGHT JOIN AssessmentResponseAnswers
ON AssessmentResponses.ID = AssessmentResponseAnswers.AssessmentResponseID)
LEFT JOIN (AssessmentQuestions RIGHT JOIN AssessmentAnswerChoices
ON AssessmentQuestions.ID = AssessmentAnswerChoices.AssessmentQuestionID)
ON AssessmentResponseAnswers.AnswerChoiceID = AssessmentAnswerChoices.AnswerChoiceID
WHERE AssessmentResponses.AssessmentID = 1 AND AssessmentResponses.RespondentID = 44;
Вот как я пытался сделать его сводным:
SELECT ID, [1A], [1B], [2A], [2B], [3A], [3B], [4A], [4B], [5A], [5B], [6A], [6B]
FROM (
SELECT AssessmentResponses.ID, AssessmentQuestions.QuestionNumber,
AssessmentResponseAnswers.QuestionID,
AssessmentAnswerChoices.AnswerChoiceNumber
FROM (AssessmentResponses RIGHT JOIN AssessmentResponseAnswers
ON AssessmentResponses.ID = AssessmentResponseAnswers.AssessmentResponseID)
LEFT JOIN (AssessmentQuestions RIGHT JOIN AssessmentAnswerChoices
ON AssessmentQuestions.ID = AssessmentAnswerChoices.AssessmentQuestionID)
ON AssessmentResponseAnswers.AnswerChoiceID = AssessmentAnswerChoices.AnswerChoiceID
WHERE AssessmentResponses.AssessmentID = 1 AND AssessmentResponses.RespondentID = 44
) AS Src
PIVOT
(
MAX(AnswerChoiceNumber)
FOR QuestionNumber IN ([1A], [1B], [2A], [2B], [3A], [3B], [4A], [4B], [5A], [5B], [6A], [6B])
)
AS Pvt;
Я надеялся, что это даст мне 1 строку с 13 столбцами (идентификатор плюс двенадцать вопросов).Но он дал мне еще 12 строк: там есть 13 столбцов, и он просто дает нулевые значения для 11 из двенадцати вопросов (в строке 1 у 1А есть ответ; в строке 2 у 1В есть ответ и т. Д.)
Чего мне не хватает?