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?