01.06.2004 -- --
02.06.2004 -- --
şeklinde
takvim tablosuna bağlayıp günleri takvim tablosundaki gun alanı ile mesai
tablosundaki gun alanına left join yaparak ilişkilendiriyouz
procedure join çekerek bunu takvim tablosu olmadan da yapmak mükün hale geliyor şöyleki
Kod: Tümünü seç
CREATE PROCEDURE SP_TARIH (
AY Numeric(2,0),
YIL Numeric(4,0))
returns (
GUN Date)
AS
declare variable TMP_AY_SONU DATE;
declare variable D date;
declare variable LDM numeric(2,0);
declare variable S numeric(2,0);
begin
D = cast('01.'||AY||'.'||YIL as date);
TMP_AY_SONU = D - EXTRACT(DAY FROM D) + 32;
LDM = cast(EXTRACT(DAY FROM (TMP_AY_SONU - EXTRACT(DAY FROM TMP_AY_SONU))) as INTEGER);
S = 1 ;
while (S <= LDM) do
begin
gun = cast(s ||'.'||AY||'.'||YIL as DATE);
S = S + 1;
suspend;
end
end
bize o aydaki günleri döndürüyor
sonucun selectide soyle
Kod: Tümünü seç
select TARIH.GUN,m.MESAI_ID,m.TARIH_SAAT,m.TIP,
(case
WHEN (EXTRACT(WEEKDAY FROM GUN - 1)+1) > 5
THEN 0
ELSE 1
END) as GUN_DURUMU
from SP_TARIH (6,2004) TARIH
left join "mesai" m
on TARIH.GUN = "mesai".TARIH_GUN
/*where
TARIH.GUN < '08.06.2004' */
order by TARIH.GUN,m.TARIH_SAAT
ikinci bir durumda firebird de select * from (select * from Table)
ifadesi gibi, from dan sonra subquery nin kullanılması (derived table deniliyormuş) desteklenmiyor bildiğim kadarıyla
işte burda
ici bos bir procedura EXECUTE STATEMENT içine parametreyle gonderilecek sql kodunu gondermek mümkün oluyor donen select listesinide table mış gibi davranmak mümkün oluyor.
(Yalnız where a = 'asd') gibi tırnaklı ifadeler nasıl çalışır orasını bilmiyorum.