07 Ağustos 2008 Perşembe

CASE WHEN...(SORGU İLE TABLO OLUŞTURMAK)

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

0 yorum: