Sorum:
case when ile basit bir tablo oluşturabiliriz;saat bazında birimlerin sayısını tablo biçiminde gösterelim;
tablolar aşağıdaki gibi ;
‘birimler’ tablosu:
birim_kodu …… birim_adi
———– ————-
100200 ……… dahiliye
100250 ……… cildiye
100305 ……… psikiyatri
‘muayene’ tablosu:
tarih ………….. birim
———- ————–
18.05.2008 08:25:10…….. 100200
18.05.2008 08:32:00 ……. 100200
18.05.2008 09:08:45 ……. 100250
18.05.2008 10:15:20 ……. 100305
18.05.2008 10:40:10 ……. 100305
18.05.2008 10:53:02 ……. 100250
—————————– ———
dikkat edilmesi gereken nokta; ‘birimler’ tablosundaki birim adları sorgu sonucu çıkacak tablomuzda alan isimleri olarak çıkacak ve ‘muayene’ tablosundaki o birimin o tarihe ait toplam kayıt sayısı sorgu sonucu çıkacak tablomuzda olacak.
select tarih,count(*) ————–
from birimler b join muayene m on(b.birim_kodu=m.birim)
group by m.tarih
acaba nasıl bir sql sorgusu yazılmalı?
Çözüm Yolu:
SELECT TO_CHAR(M.TARIH,’HH24′) AS MUAYENE_SAATI,
count(case when M.BIRIM = ‘100200’ then 1 end) as DAHILIYE,
count(case when M.BIRIM = ‘100250’ then 1 end) as CILDIYE,
count(case when M.BIRIM = ‘100305’ then 1 end) as PSIKIYATRI
FROM MUAYENE M JOIN BIRIMLER B ON(M.BIRIM=B.BIRIM_KODU)
WHERE M.BIRIM IN(‘100200′,’100250′,’100305′)
AND M.TARIH BETWEEN :T1 AND :T2
GROUP BY TO_CHAR(M.TARIH,’HH24′)
ORDER BY TO_CHAR(M.TARIH,’HH24’)
tablomuz aşağıdaki gibi satır ve sütunlardan oluşur:
MUAYENE_SAATI…….DAHILIYE ……CILDIYE…….PSIKIYATRI
———————– ————– ————- —————–
08:00-09:00 ………… 2 ………… 0 ……………. 0
09:00-10:00 ………… 0 ………… 1 ……………. 0
10:00-11:00 …………. 0 ………… 1 …………… 2