I have 2 sql tables named mtblAttendance
and mtblLeave_Data
.
I need to get the all dates from mtblLeave_Data
when User was on leave depending on absent in mtblAttendance
.
In my mtblAttendance
for every leave there is a row, but if a user on leave for a period so there is no unique row, there are just two columns Leave_From
and Leave_To
(or it may be a single entry where Leave_From= Leave_To
).
For getting the absent dates of user I wrote the query
USE [ILeave]
ALTER procedure [dbo].[Attendance_Report]
@Date1 datetime,
@Date2 datetime,
@User_Id nvarchar(50)
as begin
SELECT distinct
a.Sno,
a.[Login_Date],
a.[Week_Day],
a.[In_Time],
a.[Out_Time],
a.Attendance_Status,
a.Half_Full,
a.Leave_Type,
(convert(varchar(max),floor (abs(cast(datediff(mi, a.Out_Time, a.In_Time) AS int) / 60)))+ '.'+ convert(varchar(max),(abs(cast(datediff(mi, a.Out_Time, a.In_Time) AS int) % 60)))) as Hrs
, l.[Sno]
, l.[Leave_ID]
, l.[User_Id]
, l.[Dept_To]
, l.[Leave_Type]
, l.[Total_Leave_HR]
, l.[Leave_From]
, l.[Leave_To]
, l.[Leave_Half_Full]
, l.[Comments]
, l.[Leave_Status]
FROM
[mtblAttendance] a
LEFT JOIN [mtbl_Leave_Data] l
ON a.[Login_Date] BETWEEN l.[Leave_From] AND l.[Leave_To]
AND l.[User_Id] = a.[User_Id] where a.Login_Date between @Date1 and @Date2 and a.User_Id=@User_Id order by Login_Date
end