Как переставить 2 столбца в строку - PullRequest
2 голосов
/ 02 апреля 2019

В настоящее время эта таблица используется для опросов, в которых мне нужны только комментарии для ответа и комментарии к вопросу №3 и только комментарии к вопросу №4

+---------------------------------------------------+
| Employee | SurveyNo | Question | Answer | Comment |
+----------+----------+----------+--------+---------+
|   100    |    1     |    1     |Neutral |   NULL  |
|   100    |    1     |    2     |  Hard  |   NULL  |
|   100    |    1     |    3     |  Easy  |  asdfs  |
|   100    |    1     |    4     |  NULL  |  ssafa  |
|   200    |    2     |    1     |  Hard  |   NULL  |
|   200    |    2     |    2     |  Hard  |   NULL  |
|   200    |    2     |    3     |  Easy  |  asdfs  |
|   200    |    2     |    4     |  NULL  |   NULL  |
+---------------------------------------------------+

И я ищу что-то вроде этого

+--------------------------------------------------------------------------------+
| Employee | surveyNo |Question1 | Question2 | Question3 | CommentsQ3 | Comments |
+----------+----------+----------+-----------+-----------+------------+----------+
|   100    |    1     | Neutral  |    Hard   |   Easy    |   asdfs    |  ssafa   |
|   200    |    2     |   Hard   |    Hard   |   Easy    |   asdfs    |          |
+--------------------------------------------------------------------------------+

В настоящее время я могу получить каждый вопрос, но не комментарии, я просто хочу комментарии к Вопросу №3 и только комментарии к Вопросу №4.

Но когда я включаю комментарии, я начинаю получать повторяющиеся строки

SELECT  Employee,surveyNo,[1] as Question1,[2] as Question2,[3] as Question3
FROM
(
SELECT Employee,surveyNo,answer FROM Surveys WHERE Question in (1,2,3)
) d
pivot
(
max(answer)
for Question in ([1],[2],[3])
) piv
+--------------------------------------------------------+
| Employee | surveyNo |Question1 | Question2 | Question3 | 
+----------+----------+----------+-----------+-----------+
|   100    |    1     | Neutral  |    Hard   |   Easy    |
|   200    |    2     |   Hard   |    Hard   |   Easy    |
+--------------------------------------------------------+

1 Ответ

3 голосов
/ 02 апреля 2019

Вы можете сделать условное агрегирование:

SELECT Employee, surveyNo,
       MAX(CASE WHEN Question = 1 THEN Answer END) AS Question1 ,
       . . . 
       MAX(CASE WHEN Question = 1 THEN Comment END) AS CommentsQ1,
       . . .
FROM Surveys 
WHERE Question in (1,2,3)
GROUP BY Employee, surveyNo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...