Temat: zapytanie sql oracle
Są tutaj co najmniej 4 metody (z których 2 zostały już wymienione wcześniej).
1. DECODE
select w.dt_wykon,
w.nazwa,
decode (war.wart_zn,
0,'Wart.0',
1,'Wart.1',
2,'Wart.2',
....... ,
6,'wart.6',
'wartosc inna'
) wart_zn
from wyk_elecz w,
wykelecz_wartwyn war
where war.idk_kl_wyn='ZZOBSMIEJW'
and w.nazwa='Obserwacja wkłuć obwodowych'
and w.id_elecz='WKO'
and war.nr_danej=1
and war.t_wart='K'
and w.t_elecz='KAPZA'
and war.id_wyk_elecz=w.id_wyk_elecz
and w.stan='W'
2. SŁOWNIK:
select w.dt_wykon,
w.nazwa,
s.wartosc_opisowa
from wyk_elecz w,
wykelecz_wartwyn war,
slownik s
where war.idk_kl_wyn='ZZOBSMIEJW'
and w.nazwa='Obserwacja wkłuć obwodowych'
and w.id_elecz='WKO'
and war.nr_danej=1
and war.t_wart='K'
and w.t_elecz='KAPZA'
and war.id_wyk_elecz=w.id_wyk_elecz
and w.stan='W'
and w.wart_zn = s.wart_zn
3. CASE - działa jak decode, tylko z nieco inną składnią.
(Oracle zaleca stosowanie case - decode zostało w 11 w celu zapewnienia zgodności z niższymi wersjami i jest nie zalecane!!)
select w.dt_wykon,
w.nazwa,
case
when war.wart_zn = 0 then
'Wart.0'
when war.wart_zn = 1 then
'Wart.1'
when war.wart_zn = 2 then
'Wart.2'
..........
when war.wart_zn = 6 then
'Wart.6'
else
'Wart.inna'
end wart_zn
from wyk_elecz w,
wykelecz_wartwyn war
where war.idk_kl_wyn='ZZOBSMIEJW'
and w.nazwa='Obserwacja wkłuć obwodowych'
and w.id_elecz='WKO'
and war.nr_danej=1
and war.t_wart='K'
and w.t_elecz='KAPZA'
and war.id_wyk_elecz=w.id_wyk_elecz
and w.stan='W'
4. Rozszerzenie tablicy
wykelecz_wartwyn. Mam mocne przeczucie, że jest to tabela słownikowa.
Tak mi się wydaje, na podstawie analizy zapytania. W taki przypadku wystarczy w tabeli dodać pole wart_opisowa i użyć tego pola w zapytaniu.
select w.dt_wykon,
w.nazwa,
war.wart_opisowa,
from wyk_elecz w,
wykelecz_wartwyn war
where war.idk_kl_wyn='ZZOBSMIEJW'
and w.nazwa='Obserwacja wkłuć obwodowych'
and w.id_elecz='WKO'
and war.nr_danej=1
and war.t_wart='K'
and w.t_elecz='KAPZA'
and war.id_wyk_elecz=w.id_wyk_elecz
and w.stan='W'
Wojciech Muszyński edytował(a) ten post dnia 20.03.13 o godzinie 20:52