[oracle] Problem z zapytaniem

0

Mam problem z zapytaniem, a właściwie to z jego optymalizacją.
Powiedzmy że mam tabele PRACOWNICY:
ID_Osoby | Imie | Nazwisko|
i druga ZAROBKI:
ID_Osoby | Kwota | Is_Brutto
a więc druga tabela przechowuje zarobki przy czym kwota może być netto lub brutto w zależności od pola Is_Brutto (tabela ZAROBKI przechowuje przechowuje 2 wpisy dla każdej osoby)
W wyniku chcę otrzymać:
ID_Osoby | Imie | Nazwisko| Kwota_Brutto | Kwota_Netto
I teraz moje rozwiązanie sprowadza się do podzapytania
select tabela.*, z.Kwota as Kwota_Netto (select ID_Osoby, Imie, Nazwisko, Kwota as Kwota_Brutto from PRACOWNICY p, ZAROBKI z where p. ID_OSOBY = z.ID_OSOBY AND Is_Brutto = True) tabela, ZAROBKI z where tabela.ID_OSOBY = z.ID_OSOBY and Is_Brutto = False;
tak by wyglądała moja wersja. Czy istnieje jakiś inny sposób na wykonanie tego ?

0

Nie testowane, ale powinno działać ;P

select 
	p.*,
	case when z.IS_BRUTTO='TRUE' then z.Kwota else null end Kwota_brutto,
	case when z.IS_BRUTTO='FALSE' then null else z.Kwota end Kwota_netto,
from 
	pracownicy p,
	zarobki z
where
	p.id_osoby = z.id_osoby;

albo

select 
	p.*,
	decode(z.IS_BRUTTO,'TRUE',z.Kwota,null) Kwota_brutto,
	decode(z.IS_BRUTTO,'TRUE',null,z.Kwota) Kwota_netto
from 
	pracownicy p,
	zarobki z
where
	p.id_osoby = z.id_osoby;

W drugim przypadku Oracle może krzyknąć o konwersje typów. Można to obejść, kwestia dodania jeszcze kilku decode na argumenty ;-)

pozdr,
yarel

0

Witam

Przepraszam za wtracanie ale rozwiązanie w kturym umieszczasz tabelę z zarobkami z kwota zależną od flagi jest nieżyciowe i do tego mało wydajne - lepiej i szybciej byłoby to zrobić poprzez wpisanie 2 kolumn netto i brutto bez flagi. dzięki temu dla każdego pracwonika możesz mieć jeden wpis w tabeli :)

pozdrawiam
piotry

1 użytkowników online, w tym zalogowanych: 0, gości: 1