Как преобразовать данные из строк на основе определенного столбца в другую структуру данных
У меня есть набор результатов, который я хочу "выравниваться» посредствомService
колонка. Пример объяснит это лучше всего:
Учитывая этот набор результатов (давайте назовем этоrequest
):
---------------------------------------
| Id | Service | C1 | ... | Cn |
--------------------------------------|
| 1 | A | 5 | | 3 |
--------------------------------------|
| 1 | B | 2 | | 1 |
--------------------------------------|
| 2 | A | 9 | | 4 |
--------------------------------------
Я хочу получить это:
---------------------------------------------------------------------------
| Id | ServiceA_C1 | ... | ServiceA_Cn |ServiceB_C1 | ... | ServiceB_C2n |
---------------------------------------------------------------------------
| 1 | 5 | ... | 3 | 2 | ... | 1 |
---------------------------------------------------------------------------
| 2 | 9 | ... | 4 | NULL | ... | NULL |
---------------------------------------------------------------------------
Окончательный желаемый результат:
Каждый идентификатор (который имел несколько значений, теперь имеет одну строку)Каждое отдельное значение сервиса будет иметьn
столбцы в окончательном наборе результатовТекущее решение (которое работает, но супер долго и не эффективно):
SELECT A.C1 AS ServiceA_C1, ..,A.Cn AS ServiceA_Cn,B.C1 AS ServiceB_C1, ..,B.Cn AS ServiceB_Cn
FROM (SELECT *
FROM request
WHERE Service = 'A') AS A
JOIN
(SELECT *
FROM request
WHERE Service = 'B') AS B
ON A.Id = B.Id
Заметки:
Количество служб составляет около 10 (# различаются значения вService
колонка), это общая формулировка самой проблемы.
Я знаю SQL-манипуляции, такие как pivot, unpivot, cross apply, объединения и т. Д., И все же эта проблема меня раздражает, потому что яЯ нашел что-то хитрое, чтобы мгновенно решить эту проблему. Я был бы рад узнать, что один из этих методов решает эту проблему, и я пропустил это.
Спасибо