Dane pionowe SQL Server 2008 w poziomie

Przepraszam za przesłanie kolejnego pytania na ten temat, ale przeczytałem wiele odpowiedzi na ten temat i nie wydaje mi się, aby działało to dla mnie.

Mam trzy stoły, do których muszę dołączyć i wyciągnąć informacje. Jedna z tabel ma tylko 3 kolumny i przechowuje dane w pionie. Chciałbym przetransponować te dane do formatu poziomego.

Dane będą wyglądać następująco, jeśli tylko dołączę i pociągnę:

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)

Wynik:

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  

Zamiast tego chciałbym, żeby wyglądało to tak:

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 

W przeszłości po prostu uciekałem się do szukania wszystkich potrzebnych pól field_id w moich danych i tworzenia instrukcji CASE dla każdego z nich. Aplikacja, z której korzystają użytkownicy, zawiera dane dla wielu produktów, a każdy produkt zawiera różne pola. Biorąc pod uwagę liczbę obsługiwanych produktów i liczbę pól dla każdego produktu (wiele, wiele więcej niż podstawowy przykład, który pokazałem powyżej), szukanie ich i zapisywanie dużych fragmentów instrukcji CASE zajmuje dużo czasu.

Zastanawiałem się, czy jest tam jakiś kod oszustwa, aby osiągnąć to, czego potrzebuję, bez konieczności szukania pól i pisania rzeczy. Wiem, że funkcja PIVOT jest prawdopodobnie tym, czego szukam, jednak nie wydaje mi się, aby działała poprawnie.

Myślisz, że moglibyście pomóc?

questionAnswers(3)

yourAnswerToTheQuestion