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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta