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