Как я могу преобразовать строки в столбцы условно в MySQL?Прочитайте тело пожалуйста - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть таблица, в которой есть данные как таковые

id | customerName  | Campaign questionId | answerID | caseID | 
1  |   john        | Inbound | 1         | 2        | 1
2  |   john        | Inbound | 2         | 3        | 1 
3  |   john        | Inbound | 3         | 1        | 1
4  |   john        | Inbound | 4         | 5        | 1
5  |   john        | Inbound | 5         | 4        | 1
6  |   john        | Outbound| 6         | 7        | 1
7  |   john        | Outbound| 7         | 9        | 1
8  |   john        | Outbound| 8         | 2        | 1   
9  |   john        | Outbound| 9         | 1        | 1
10 |   john        | Outbound|10         | 4        | 1

Подробности: у клиента может быть несколько случаев, и в каждом случае может быть два опроса для каждого клиента как исходящего и входящего.Всего для этих опросов будет использовано 10 заранее определенных вопросов.5 для исходящих и 5 для входящих.В моей текущей ситуации я могу получить данные, как показано выше, по 1 строке для каждого вопроса и ответа.В сумме = для клиента, у которого есть 1 случай и 2 кампании, что составляет 10 строк.Моя цель состоит в том, чтобы получить 2 строки на каждого клиента в каждом конкретном случае.1 строка для входящих и других для исходящих.Вместо того, чтобы иметь строку для каждого вопроса с повторяющейся информацией, я ищу столбцы для каждого вопроса.Желаемый результат:

id|Name|caseId  |Campaign | Q1 | Q2 | Q3 | Q4 | Q5
1 |John|  1     |Outbound | 2  | 3  |1   | 5  | 4
2 |John|  1     |Inbound  | 7  | 9  |2   | 1  | 4   

Всего вопросов: 10 предопределенных вопросов;Исходящее обследование: 5 вопросов Входящее обследование: 5 вопросов

1 Ответ

1 голос
/ 23 сентября 2019

Вы можете получить желаемые результаты, используя условное агрегирование для выполнения разворота и группируя по caseID, customerName и Campaign:

SELECT customerName,
       caseID,
       Campaign,
       MAX(CASE WHEN questionID % 5 = 1 THEN answerID END) AS Q1,
       MAX(CASE WHEN questionID % 5 = 2 THEN answerID END) AS Q2,
       MAX(CASE WHEN questionID % 5 = 3 THEN answerID END) AS Q3,
       MAX(CASE WHEN questionID % 5 = 4 THEN answerID END) AS Q4,
       MAX(CASE WHEN questionID % 5 = 0 THEN answerID END) AS Q5
FROM data
GROUP BY caseID, customerName, Campaign

Вывод:

customerName    caseID  Campaign    Q1  Q2  Q3  Q4  Q5
john            1       Inbound     2   3   1   5   4
john            1       Outbound    7   9   2   1   4

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...