Я пытаюсь развернуть следующий набор данных в SQL.
SELECT ParticipantID,
ContactReasonTypeID,
Completed = CASE WHEN Returned IS NOT NULL
THEN 'Completed'
ELSE 'Not completed'
END
FROM ContactReason
WHERE ContactReasonTypeID = 40 -- M4
UNION
SELECT ParticipantID,
ContactReasonTypeID,
Completed = CASE WHEN Returned IS NOT NULL
THEN 'Completed'
ELSE 'Not completed'
END
FROM ContactReason
WHERE ContactReasonTypeID = 80 -- M8
Что дает следующий результат:
ParticipantID | QuestionnaireID | Completed
1 40 'Completed'
1 80 'Not completed'
2 40 'Completed'
2 80 'Completed'
3 40 'Completed'
3 80 'Not completed'
4 40 'Completed'
4 80 'Not completed'
То, что я хотел бы, чтобы результаты отображались следующим образом (где M4 - это вопросник ID 40, а М8 - 80):
ParticipantID | M4 | M8
1 'Completed' 'Not completed'
2 'Completed' 'Completed'
3 'Completed' 'Not completed'
4 'Completed' 'Not completed'
Я изо всех сил пытаюсь повернуть стол. Мой текущий SQL выглядит следующим образом и приводит к ошибкам. Я пытался переключаться между столбцами на основе других сообщений, но не могу понять, что нужно:
SELECT *
FROM (
SELECT ParticipantID,
ContactReasonTypeID,
Completed = CASE WHEN Returned IS NOT NULL
THEN 'Completed'
ELSE 'Not completed'
END
FROM ContactReason
WHERE ContactReasonTypeID = 40
UNION
SELECT ParticipantID,
ContactReasonTypeID,
Completed = CASE WHEN Returned IS NOT NULL
THEN 'Completed'
ELSE 'Not completed'
END
FROM ContactReason
WHERE ContactReasonTypeID = 80
) AS tbl
PIVOT (
MAX(Returned)
FOR ContactReasonTypeID IN ([M4],[M8])
) AS pvt
ORDER BY ParticipantID