SQL Server 2008 Vertical data a horizontal
Me disculpo por enviar otra pregunta sobre este tema, pero he leído muchas de las respuestas sobre este tema y parece que no puedo hacer que funcione para mí.
Tengo tres mesas a las que necesito unirme y sacar información. Una de las tablas es solo 3 columnas y almacena los datos verticalmente. Me gustaría trasladar esos datos a un formato horizontal.
Los datos se verán así si me uno y me conecto:
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)
Resultado:
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
En su lugar, me gustaría que se vea así:
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
En el pasado, solo recurrí a buscar todos los field_id's que necesitaba en mis datos y creé sentencias CASE para cada uno. La aplicación que utilizan los usuarios contiene datos para varios productos, y cada producto contiene campos diferentes. Teniendo en cuenta la cantidad de productos admitidos y la cantidad de campos para cada producto (muchos, muchos más que el ejemplo básico que mostré anteriormente), lleva mucho tiempo buscarlos y escribir grandes porciones de declaraciones de CASE.
Me preguntaba si hay algún código de trucos para lograr lo que necesito sin tener que buscar los field_ids y escribir cosas. Sé que la función PIVOT es probablemente lo que estoy buscando, sin embargo, parece que no consigo que funcione correctamente.
¿Piensan que ustedes podrían ayudar?