SQL Server 2008 Вертикальные данные в горизонтальные
Я прошу прощения за то, что отправил еще один вопрос по этой теме, но я прочитал многие ответы на этот вопрос, и я не могу заставить его работать на меня.
У меня есть три таблицы, к которым мне нужно присоединиться и получить информацию. Одна из таблиц занимает всего 3 столбца и хранит данные по вертикали. Я хотел бы перенести эти данные в горизонтальный формат.
Данные будут выглядеть так, если я просто присоединюсь и потяну:
SELECT
a.app_id,
b.field_id,
c.field_name,
b.field_value
FROM table1 a
JOIN table2 b ON a.app_id = b.app_id
JOIN table3 c ON b.field_id = c.field_id --(table3 is a lookup table for field names)
Результат:
app_id | field_id | field_name | field_value
-----------------------------------------------------
1234 | 101 | First Name | Joe
1234 | 102 | Last Name | Smith
1234 | 105 | DOB | 10/15/72
1234 | 107 | Mailing Addr | PO BOX 1234
1234 | 110 | Zip | 12345
1239 | 101 | First Name | Bob
1239 | 102 | Last Name | Johnson
1239 | 105 | DOB | 12/01/78
1239 | 107 | Mailing Addr | 1234 N Star Ave
1239 | 110 | Zip | 12456
Вместо этого я хотел бы, чтобы это выглядело так:
app_id | First Name | Last Name | DOB | Mailing Addr | Zip
--------------------------------------------------------------------------
1234 | Joe | Smith | 10/15/72 | PO BOX 1234 | 12345
1239 | Bob | Johnson | 12/01/78 | 1234 N Star Ave | 12456
Раньше я просто прибегал к поиску всех необходимых мне field_id в своих данных и создавал операторы CASE для каждого из них. Приложение, которое используют пользователи, содержит данные для нескольких продуктов, и каждый продукт содержит разные поля. Учитывая количество поддерживаемых продуктов и количество полей для каждого продукта (много, намного больше, чем приведенный выше базовый пример), требуется много времени, чтобы найти их и выписать огромные куски операторов CASE.
Мне было интересно, есть ли какой-нибудь чит-код для достижения того, что мне нужно, без необходимости искать field_ids и писать вещи. Я знаю, что функция PIVOT, вероятно, то, что я ищу, однако, я не могу заставить ее работать правильно.
Думаешь, вы, ребята, могли бы помочь?