Oracle plsql ile iç içe kontroller (nested case) ve Rownum kullanımı

İçiçe kontroller oluşturmak (nested case):
SELECT
CASE
WHEN nvl(musteri.sigortatipi, 0) != 0 THEN --ilgili musterinin sigortası varsa
(select sum(sigorta.odenentutar)
from tblsigorta sigorta
on musteri.musteriNo = sigorta.musteriNo
and sigorta.tip = musteri.sigortatipi)
WHEN nvl(musteri.teminat, 0) != 0 THEN --ilgili musterinin teminatı varsa
(case
when teminat.tur = 1 then
sum(teminat.tutar)
when teminat.tur = 2 then
sum(teminat.tutar) + sum(teminat.odenmisler)
else
0
end) END "ToplamOdenebilirTutar"

FROM tblmusteri musteri
INNER JOIN tblteminat teminat ON musteri.musteriNo = teminat.musteriNo

Rownum kullanımı:

T-SQL de "SELECT TOP n" ifadesi ile bir veri kümesinin ilk n kaydını çekebiliriz. PLSQL de ise bunun için "ROWNUM = n" ifadesinden yararlanmak gerekir. Aşağıdaki örnekte 2 nolu sınıftaki en küçük numaralı öğrenciyi çeken cümleyi görebiliriz.

SELECT ogr.adi FROM ogrenci ogr WHERE ROWNUM = 1 AND ogr.sinif = 2 ORDER BY ogr.ogrencino ASC;

Buna alternatif olarak MIN() ve GROUP BY ifadeleri ile de aynı sonuca ulaşabilirdik:

SELECT MIN(ogr.ogrencino), ogr.adi FROM ogrenci ogr WHERE ogr.sinif = 2 GROUP BY ogr.adi

Hiç yorum yok: