ďťż
 
[ib6|zapytanie] 1 Tabela ;) ďťż
 
[ib6|zapytanie] 1 Tabela ;)
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[ib6|zapytanie] 1 Tabela ;)



g0mez - 18-03-2006 01:15
[ib6|zapytanie] 1 Tabela ;)
  Witam,
Mam tabele wplaty:
nazwisko, typ, kwota

przykladowe dane:
'kowalski','M',30
'kowalski','M',20
'zdunski','S',10
'kowalski','S',10

Jak wyświetlić dane w taki sposób?:
nazwisko M S
kowalski 50 10
zdunski 0 10

możliwe zapytanie to:
select
wp0.nazwisko,
(select sum(kwota) from wplaty wpm where wpm='M' and
wpm.nazwisko=wp0.nazwisko) as M,
(select sum(kwota) from wplaty wpm where wpm='S' and
wpm.nazwisko=wp0.nazwisko) as S
from
wplaty wp0
group by
nazwisko

Lecz jest to rozwiązanie dość wolne, nie dałoby się czegoś takiego zrobić
używając złączeń?

--
Pozdrawiam, g0mez
+-------------------------------------------------+
| Miejsce na Twoją reklamę |
+-------------------------------------------------+





Noel - 18-03-2006 01:15

  Użytkownik g0mez napisał:
> Witam,
> Mam tabele wplaty:
> nazwisko, typ, kwota
>
> przykladowe dane:
> 'kowalski','M',30
> 'kowalski','M',20
> 'zdunski','S',10
> 'kowalski','S',10
>
> Jak wyświetlić dane w taki sposób?:
> nazwisko M S
> kowalski 50 10
> zdunski 0 10
>
> możliwe zapytanie to:
> select
> wp0.nazwisko,
> (select sum(kwota) from wplaty wpm where wpm='M' and
> wpm.nazwisko=wp0.nazwisko) as M,
> (select sum(kwota) from wplaty wpm where wpm='S' and
> wpm.nazwisko=wp0.nazwisko) as S
> from
> wplaty wp0
> group by
> nazwisko

> Lecz jest to rozwiązanie dość wolne, nie dałoby się czegoś takiego
> zrobić używając złączeń?

--// pod warunkiem, że ib6 posiada 'decode':

SELECT nazwisko,
DECODE(typ,'M', sum(kwota), 0) typ,
DECODE(typ,'S', sum(kwota), 0) typ2
GROUP BY typ, nazwisko;

--
Tomek "Noel" B.




g0mez - 18-03-2006 01:15

  Użytkownik "Noel" <tbal@go2.pll-l> napisał w wiadomości
news:dve9i9$p04$1@inews.gazeta.pl...
Użytkownik g0mez napisał:
> Witam,
> Mam tabele wplaty:
> nazwisko, typ, kwota
>
> przykladowe dane:
> 'kowalski','M',30
> 'kowalski','M',20
> 'zdunski','S',10
> 'kowalski','S',10
>
> Jak wyświetlić dane w taki sposób?:
> nazwisko M S
> kowalski 50 10
> zdunski 0 10
>
> możliwe zapytanie to:
> select
> wp0.nazwisko,
> (select sum(kwota) from wplaty wpm where wpm='M' and
> wpm.nazwisko=wp0.nazwisko) as M,
> (select sum(kwota) from wplaty wpm where wpm='S' and
> wpm.nazwisko=wp0.nazwisko) as S
> from
> wplaty wp0
> group by
> nazwisko

> Lecz jest to rozwiązanie dość wolne, nie dałoby się czegoś takiego zrobić
> używając złączeń?

--// pod warunkiem, że ib6 posiada 'decode':

Ano niestety nie obsługuje decode

--
Pozdrawiam, g0mez
+-------------------------------------------------+
| Miejsce na Twoją reklamę |
+-------------------------------------------------+




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 18-03-2006 01:15

  "g0mez" <gosmo67@pocztaWYTNIJ.onet.pl> wrote:
> Lecz jest to rozwiązanie dość wolne, nie dałoby się czegoś takiego
> zrobić używając złączeń?
Hm, no używając złączeń to by było coś takiego (testowane na Oracle):

select s.nazwisko, m.suma m, s.suma s
from
(select nazwisko, sum(kwota) suma from wplaty where typ = 'S' group by
nazwisko) s
full outer join
(select nazwisko, sum(kwota) suma from wplaty where typ = 'M' group by
nazwisko) m
on s.nazwisko = m.nazwisko;

ale czy to będzie wydajniejsze, to musisz przetestować. Generalnie, jeśli
jest to podstawowe zapytanie w Twoim systemie, to bym się poważnie
zastanowił nad rozbiciem tego na dwie tabele (zwłaszcza jeśli nie masz
do dyspozycji CASE/DECODE), albo przyspieszeniem któregoś z powyższych
za pomocą odpowiednich indeksów. W Oracle rozważyłbym na pewno indeks
bitmapowy na TYP, ale w IB chyba nie ma czegoś takiego...

--
Michał Kuratczyk





=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 18-03-2006 01:15

  Michał Kuratczyk <kura@lj.pl> wrote:
> przyspieszeniem któregoś z powyższych za pomocą odpowiednich indeksów.
Jeszcze gwoli uściślenia - to pod warunkiem, że Twój przykład był
uproszczony, bo jeśli faktycznie masz tylko trzy pola i potrzebujesz
dane dwóch z nich na podstawie trzeciego, to indeks raczej Ci wiele nie
pomoże, bo i tak musisz całą tabelę przeczytać. Ale to już tylko Ty
wiesz co dokładnie masz i czego dokładnie potrzebujesz. A tego, że
przykład był uproszczony domyślam się po tym, że podajesz nazwisko
w każdym wierszu tabeli zamiast wydzielić dane osobowe do ostatniej
tabeli (normalizacja).
Nie trzymasz nazwiska w każdym wierszu, prawda? :->

--
Michał Kuratczyk




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 18-03-2006 01:15

  Użytkownik g0mez napisał:
>
> --// pod warunkiem, że ib6 posiada 'decode':
>
> Ano niestety nie obsługuje decode

Oj, a nie wpadłeś na to, że inna instrukcja warunkwą trzeba użyć?

--
P.M.




wloochacz - 18-03-2006 15:11

  > select s.nazwisko, m.suma m, s.suma s
> from
> (select nazwisko, sum(kwota) suma from wplaty where typ = 'S' group by
> nazwisko) s
> full outer join
> (select nazwisko, sum(kwota) suma from wplaty where typ = 'M' group by
> nazwisko) m
> on s.nazwisko = m.nazwisko;
Nie zadziała - IB6 nie obsługuje dervied tables (select from select).
Nie ma rady, trzeba sobie napisać procedurę.

> ale czy to będzie wydajniejsze, to musisz przetestować. Generalnie, jeśli
> jest to podstawowe zapytanie w Twoim systemie, to bym się poważnie
> zastanowił nad rozbiciem tego na dwie tabele (zwłaszcza jeśli nie masz
> do dyspozycji CASE/DECODE), albo przyspieszeniem któregoś z powyższych
> za pomocą odpowiednich indeksów. W Oracle rozważyłbym na pewno indeks
> bitmapowy na TYP, ale w IB chyba nie ma czegoś takiego...
Ano, nie ma :-)

--
wloochacz
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?= [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= [MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?= mecze sie i mecze i nic - zapytanie czesciowe
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • numervin.keep.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com