Как преобразовать данные из строк на основе определенного столбца в другую структуру данных

У меня есть набор результатов, который я хочу "выравниваться» посредством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, объединения и т. Д., И все же эта проблема меня раздражает, потому что яЯ нашел что-то хитрое, чтобы мгновенно решить эту проблему. Я был бы рад узнать, что один из этих методов решает эту проблему, и я пропустил это.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос