Merhaba arkadaşlar bir sorgu da 3 tane tablom var. Bir kullanıcı tablosu, çalışma saatlerini girdikleri tablo, tatil tablosu. Bu sorguda o hafta çalışma tablosuna giriş yapmış kullanıcıların hesaplaması yapılıyor.
Burada ilk önce kullanıcı tablosunda kullanıcılar gelmeli ondan sonra o hafta çalışma zamanı girmiş ise hesaplama zamanı gelecek. Eğer hiç girmemiş ise 0 gelecek.
Hesaplama kısmını hallettim. Sadece yukarıdaki kısım kaldı. Burada nasıl bir yol izlemeliyim.
declare @currentDate datetime = '2019-07-15'
declare @basla datetime;
declare @bitis datetime;
declare @toplamSaat int;
set @basla = (SELECT dateadd(hour, 12, DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, @currentDate), DATEDIFF(dd, 0,@currentDate)))))-6
set @bitis = (SELECT dateadd(hour, 12, DATEADD(DAY,0,(DATEADD(wk, 1, DATEADD(DAY, 0-DATEPART(WEEKDAY, @currentDate), DATEDIFF(dd, 0, @currentDate)))))))-7
set @toplamSaat = 0;
declare @currentDay datetime;
declare @i int = 0
declare @halfDayUsedBefore bit = 0
WHILE @i < 5
BEGIN
set @currentDay = DATEADD(DAY, @i, @basla)
declare @holidayId bigint = 0
declare @isHalfDay bit = 0
select top 1 @holidayId = ID from E_P_Parameters_F_HolidaysModal where @currentDay between txtStartDate and txtFinishDate
if (@holidayId > 0)
begin
if (@halfDayUsedBefore = 0)
begin
select @isHalfDay = chcYarim from E_P_Parameters_F_HolidaysModal where ID = @holidayId and CONVERT(date, @currentDay) = CONVERT(date, txtStartDate)
if (@isHalfDay = 1)
begin
set @toplamSaat = @toplamSaat + 4
set @halfDayUsedBefore = 1
end
end
end
else
begin
set @toplamSaat = @toplamSaat + 8
end
set @i = @i + 1
END;
SELECT
PO.cbEmployee_TEXT [Kaynak],
Sum(FM.txtHours) [Saat],
datepart(wk,FM.txtEffortDate) Hafta,
datepart(wk, @basla) [HaftaBasi],
datepart(wk, @bitis) [HaftaSonu],
case when Sum(FM.txtHours) < @toplamSaat then 1 else 0 end as [EksikVarmi],
@toplamSaat as [Toplam Saat]
FROM
E_DT_EforGiris_F_PortfoyCalisan PO
LEFT JOIN E_DT_EforGiris_F_EforGiris F ON (F.txtEffortOwner_TEXT = PO.cbEmployee_TEXT)
LEFT JOIN E_DT_EforGiris_F_EforGiris_dtyEffort D ON (F.ID=D.FORMID)
LEFT JOIN E_DT_EforGiris_F_EforModal FM ON (D.DOCUMENTID=FM.ID)
LEFT JOIN E_DT_EforGiris_F_PortfoyCalisan PO ON (FM.txtEffortOwner_TEXT = PO.cbEmployee_TEXT)
LEFT JOIN OSUSERS O ON (PO.cbEmployee = O.ID)
LEFT JOIN OSMANAGERS OS ON (OS.USERID = O.ID)
LEFT JOIN OSUSERS OS2 ON (OS.MANAGERUSERID = OS2.ID)
LEFT JOIN DOCUMENTS DO ON (DO.ID=F.ID AND DO.DELETED=0)
LEFT JOIN LIVEFLOWS LF ON (DO.OWNERPROCESSID=LF.ID AND LF.DELETED=0 AND LF.STATUS=20)
LEFT JOIN DOCUMENTS DC ON (DC.ID=FM.ID AND DC.DELETED=0)
Where year(FM.txtEffortDate) = YEAR(@basla) and DATEPART(wk,FM.txtEffortDate) = DATEPART(wk,@basla)
Group by
PO.cbEmployee_TEXT,
datepart(wk,FM.txtEffortDate)