Jak wyciągnąć takie dane...
Zibi - 27-05-2006 00:39
Jak wyciągnąć takie dane...
Witam, czy ktoś z bardziej doświadczonych w SQLu ode mnie może mi pomóc w skonstruowaniu poprawnego zapytania?
Tabela nazwa_tabeli zawiera kolumny: numer_dzial, numer_wskaznik, wartosc_wskaznik, data_rok, data_mc, data_dzien
Są tam zapisywane każdego dnia rekordy dla każdego wskaźnika dla każdego działu (każdy dział składa codziennie raport z np. 5 wskaźników).
Chciałbym teraz odczytać zsumowane wartości poszczególnych wskaźników w określonym przedziale czasowym (oczywiście wskaźniki zsumowane w ramach danego działu). Wiem, że trzeba tu skorzystać z funkcji agregacji ale nie za bardzo mi to wychodzi.
Dzięki za pomoc
Parasit Hendersson - 27-05-2006 00:39
Dnia Fri, 26 May 2006 12:22:45 +0200, Zibi napisał(a):
> Tabela nazwa_tabeli zawiera kolumny: > numer_dzial, numer_wskaznik, wartosc_wskaznik, data_rok, data_mc, data_dzien
> Chciałbym teraz odczytać zsumowane wartości poszczególnych wskaźników w > określonym przedziale czasowym (oczywiście wskaźniki zsumowane w ramach > danego działu). Wiem, że trzeba tu skorzystać z funkcji agregacji ale > nie za bardzo mi to wychodzi.
Chyba nie rozumiem istoty problemu, nie działa po prostu: select sum(wartosc_wskaznik) from nazwa_tabeli where numer_wskaznik = costam and data_rok = 2006 and data_mc = 5 and .... itp itd.
Zibi - 27-05-2006 00:39
[...]
> Chyba nie rozumiem istoty problemu, nie działa po prostu: > select sum(wartosc_wskaznik) from nazwa_tabeli where > numer_wskaznik = costam and > data_rok = 2006 and > data_mc = 5 and .... itp itd.
OK. Inaczej. Tak jak powyżej działa ale musze 'ręcznie' wskazać jaki dział i jaki wskaźnik. Ja chcę aby zapytanie zwróciło mi pogrupowane zestawienie (wg działu i wskaznika) dla wszystkich działów. Co chcę otrzymać, np.:
przykładowy zapis w tabeli: id_dzial id_wskaznik data_rok data_mc data_dz wartosc 001 1 2006 05 20 10 001 2 2006 05 20 20 001 3 2006 05 20 30 001 1 2006 05 21 1 001 2 2006 05 21 2 001 3 2006 05 21 3 001 1 2006 05 22 5 001 2 2006 05 22 6 001 3 2006 05 22 7
002 1 2006 05 20 100 002 2 2006 05 20 200 002 3 2006 05 20 300
oczekuję: id_dzial id_wskaznik data_rok data_mc wartosc 001 1 2006 05 16 <-- (10+1+5) 001 2 2006 05 28 <-- (20+2+6) 001 3 2006 05 40 ...
002 1 2006 05 100 002 2 2006 05 200 002 3 2006 05 300
Mariusz Pasieczny - 27-05-2006 00:39
=?ISO-8859-2?Q?Re:_Jak_wyci=B1gn=B1=E6_takie_dane...?=
Zibi <TNIJSPAMzbigniew.rutkowski@wp.pl> napisał(a):
> [...] > > > Chyba nie rozumiem istoty problemu, nie działa po prostu: > > select sum(wartosc_wskaznik) from nazwa_tabeli where > > numer_wskaznik = costam and > > data_rok = 2006 and > > data_mc = 5 and .... itp itd. > > OK. Inaczej. Tak jak powyżej działa ale musze 'ręcznie' wskazać jaki dział i > jaki wskaźnik. Ja chcę aby zapytanie zwróciło mi pogrupowane zestawienie (wg > działu i wskaznika) dla wszystkich działów. > Co chcę otrzymać, np.: > > przykładowy zapis w tabeli: > id_dzial id_wskaznik data_rok data_mc data_dz wartosc > 001 1 2006 05 20 10 > 001 2 2006 05 20 20 > 001 3 2006 05 20 30 > 001 1 2006 05 21 1 > 001 2 2006 05 21 2 > 001 3 2006 05 21 3 > 001 1 2006 05 22 5 > 001 2 2006 05 22 6 > 001 3 2006 05 22 7 > > 002 1 2006 05 20 100 > 002 2 2006 05 20 200 > 002 3 2006 05 20 300 > > > oczekuję: > id_dzial id_wskaznik data_rok data_mc wartosc > 001 1 2006 05 16 <-- > (10+1+5) > 001 2 2006 05 28 <-- > (20+2+6) > 001 3 2006 05 40 ... > > 002 1 2006 05 100 > 002 2 2006 05 200 > 002 3 2006 05 300 > >
SELECT *, SUM(wartosc) FROM tabela WHERE data_rok="2006" GROUP BY id_dzial, id_wskaznik
?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Zibi - 27-05-2006 00:39
[...] > SELECT *, SUM(wartosc) FROM tabela WHERE data_rok="2006" GROUP BY > id_dzial, > id_wskaznik
Dzięki, zadziałało, zrobiłem coś takiego:
SELECT id_dzial, id_wskaznik, SUM(wartosc) FROM nazwa_tabeli GROUP BY id_dzial, id_wskaznik
A teraz jak zrobić warunek abym mógł określać przedział czasowy dla sumowania wartosci? Domyślam, się, że muszę zastosować HAVING? Czyli coś w rodzaju: HAVING data_rok = '2006' and data_mc = '05' and okres_dz < '27'? Ale to nie działa i woła, że kolumny wymienione w HAVING muszą odnosić się do wartości zagregowanych.
Dzięki za dotychczasowe wskazówki. Zibi
Mariusz Pasieczny - 27-05-2006 00:39
=?ISO-8859-2?Q?Re:_Jak_wyci=B1gn=B1=E6_takie_dane...?=
Zibi <TNIJSPAMzbigniew.rutkowski@wp.pl> napisał(a):
> [...] > > SELECT *, SUM(wartosc) FROM tabela WHERE data_rok="2006" GROUP BY > > id_dzial, > > id_wskaznik > > Dzięki, zadziałało, zrobiłem coś takiego: > > SELECT id_dzial, id_wskaznik, SUM(wartosc) > FROM nazwa_tabeli > GROUP BY id_dzial, id_wskaznik > > A teraz jak zrobić warunek abym mógł określać przedział czasowy dla > sumowania wartosci? Domyślam, się, że muszę zastosować HAVING? Czyli coś w > rodzaju: HAVING data_rok = '2006' and data_mc = '05' and okres_dz < '27'? > Ale to nie działa i woła, że kolumny wymienione w HAVING muszą odnosić się > do wartości zagregowanych. >
SELECT id_dzial, id_wskaznik, SUM(wartosc) FROM nazwa_tabeli WHERE data_rok>"2005" AND data_rok<"2006" GROUP BY id_dzial, id_wskaznik
?
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Zibi - 27-05-2006 00:39
[...] > SELECT id_dzial, id_wskaznik, SUM(wartosc) FROM nazwa_tabeli WHERE > data_rok>"2005" AND data_rok<"2006" GROUP BY id_dzial, id_wskaznik
Dziękuję! Jest OK.
Pozdrawiam, Zibi
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MySQL] Czy da =?ISO-8859-2?Q?si=EA_wykonac_takie_powi=B1z?==?ISO-8859-2?Q?anie_mi=EAdzy_tabelami=2C_i_jak_to_odpyta=E6_? ==?ISO-8859-2?Q?=3F?=
=?iso-8859-2?q?Sybase_jak_wyci=B1gn=B1=E6_dane_generowane_prz ez_funkcje?=
=?iso-8859-2?q?[ms_sql]_Sprawdzenie_kto_usun=B1=B3_dane_w_tabeli_=3F?=
Jak wyswietlic dane z dwoch tabel gdy dla jednej z nich jest brak jest danej wartosci
czemu dane www znikaja z darmowego serwera xhost po okolo 2 tyg?
=?iso-8859-2?Q?jak_zamieni=E6_dane_w_bazie_MS_access?=
dane, struktura drzewiasta, =?ISO-8859-2?Q?=B3adna_prezentacja?=
=?iso-8859-2?q?Dane_o_nieruchomo=B6ciach_w_okolicy_Warszawy?=
[mssql] Dane pośrednie, jak wyjąć/wykorzystać ponownie? jak to zrobić?
[mySQL] jak wprowadzić dane i max rekord z innej tabeli?
zanotowane.pldoc.pisz.plpdf.pisz.plshanti.opx.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 |
|