[MS SQL 2000] PIVOT?
Krzysztof Wiśniewski - 04-04-2006 00:08
[MS SQL 2000] PIVOT?
Nie mam pomysłu na sensowny opis sytuacji, więc posłużę się przykładem. Z zewnętrznego systemu dostaję dane w następujących zbiorach:
tabela Plany: ------------------------------------------- | Produkt | Okres | ------------------------------------------- | produkt 1 | 3 miesiące | ------------------------------------------- | produkt 1 | 6 miesięcy | ------------------------------------------- | produkt 1 | 9 miesięcy | ------------------------------------------- | produkt 2 | 1 miesiąc | ------------------------------------------- | produkt 2 | 9 miesięcy | -------------------------------------------
tabela Wyniki: --------------------------------------------------------- | Produkt | Parametr | Wynik | Okres | --------------------------------------------------------- | produkt 1 | pierwszy | 23.77 | 3 miesiące | --------------------------------------------------------- | produkt 1 | drugi | 30.17 | 3 miesiące | --------------------------------------------------------- | produkt 1 | trzeci | 35.16 | 3 miesiące | --------------------------------------------------------- | produkt 1 | pierwszy | 13.77 | 6 miesięcy | --------------------------------------------------------- | produkt 1 | trzeci | 15.16 | 6 miesięcy | --------------------------------------------------------- | produkt 1 | pierwszy | 19.99 | 9 miesięcy | --------------------------------------------------------- | produkt 2 | pierwszy | 7.16 | 1 miesiąc | --------------------------------------------------------- itd...
W jaki sposób otrzymać (dla podanego Produktu) zestawienie, które: - będzie się składało z tylu kolumn, ile różnych okresów zdefiniowano dla niego w tabeli "Plany", - poszczególne kolumny będą zawierały w swoich nagłówkach wartości zapisane w polu "Okres" w tabeli "Plany", - nagłówkami wierszy będą wartości zapisane w polu "Parametr" w tabeli "Wyniki", - na przecięciu kolumny i wiersza znajdzie się wartość z pola "Wynik" z tabeli "Wyniki", lub NULL, jeśli takiego wpisu w bazie nie ma ??
Przykładowe rezultaty dla powyższych danych:
Dla 'produkt 1': ----------------------------------------------------- | Parametr | 3 miesiace | 6 miesięcy | 9 miesięcy | ----------------------------------------------------- | pierwszy | 23.77 | 13.77 | 19.99 | ----------------------------------------------------- | drugi | 30.17 | NULL | 15.16 | ----------------------------------------------------- | trzeci | NULL | 15.16 | NULL | -----------------------------------------------------
Dla 'produkt 2': ---------------------------------------- | Parametr | 1 miesiąc | 9 miesięcy | ---------------------------------------- | pierwszy | 7.16 | NULL | ----------------------------------------
Próbowałem z tabelą tymczasową, ale nie mam pojęcia, jak uzależnić ilość pól w niej tworzonych od ilości wierszy zwróconych dla danego produktu w tabeli "Plany"...
Będę wdzięczny za wszelkie konstruktywne sugestie.
-- Pozdrawiam, Krzysiek
Shalom - 05-04-2006 00:03
pivot
Krzysztof Wisniewski - 05-04-2006 00:03
Shalom napisal(a): > pivot
A móglbys ów "pivot" nieco rozwinac? Przyklad z BOL odnosi sie do sytuacji, w której WIEMY ile mamy kolumn w docelowej siatce danych. W moim przypadku warunek ten nie jest spelniony; ale moze o czyms zapomnialem... ?
Pozdrawiam, Krzysiek
Grzegorz Danowski - 05-04-2006 00:03
Użytkownik "Krzysztof Wiśniewski" <ktuvok@poczta.onet.pl> napisał w wiadomości news:e0s849$qiq$1@news.onet.pl... (...) > W jaki sposób otrzymać (dla podanego Produktu) zestawienie, które: > - będzie się składało z tylu kolumn, ile różnych okresów zdefiniowano dla > niego w tabeli "Plany", > - poszczególne kolumny będą zawierały w swoich nagłówkach wartości > zapisane > w polu "Okres" w tabeli "Plany", > - nagłówkami wierszy będą wartości zapisane w polu "Parametr" w tabeli > "Wyniki", > - na przecięciu kolumny i wiersza znajdzie się wartość z pola "Wynik" z > tabeli "Wyniki", lub NULL, jeśli takiego wpisu w bazie nie ma > ??
Googla wyłączyli czy co? np.: http://groups.google.pl/group/pl.com...0b26ffba6b3df/
G.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[oracle] - Oracle SQL Developer - co to jest SID?
=?ISO-8859-2?Q?[Oracle]_Wywo=B3anie_skryptu_sh_z_PL/SQL-a=3F=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plfelgiuzywane.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|