У меня есть 2 таблицы sql по имени mtblAttendance
и mtblLeave_Data
.Как соединить таблицы sql по-моему
Мне нужно получить все даты от mtblLeave_Data
, когда Пользователь находился в отпуске в зависимости от отсутствия в mtblAttendance
.
В моем mtblAttendance
для каждой покинуть есть ряд, но если пользователь в отпуск на период, так нет уникальной строки, есть только две колонки Leave_From
и Leave_To
(или это может быть одна запись, где Leave_From= Leave_To
) ,
Для получения отсутствующих дат пользователя Я написал запрос
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 [email protected]_Id order by Login_Date
end
Я думаю, у меня есть идея, что вы имеете в виду, но я не уверен. Пример с некоторыми реальными данными был бы приятным. Это делает ваш вопрос более ясным. Правильно ли я понимаю, что ваша проблема заключается главным образом в том, что вам нужны записи в результате с датами, которые являются частью периода? Таким образом, вы не можете выбрать дни, но вам нужен способ динамически генерировать дни периодов? – SonOfGrey
Если ваша проблема в том, что я думаю, вы должны иметь возможность присоединиться к таблице или функции, которая содержит все даты за период. [Здесь] (http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates) являются хорошими примерами того, как это сделать. Простейшее начало: создайте таблицу с столбцом даты, которая содержит даты в течение многих лет. Вы можете присоединиться к нему, когда захотите. – SonOfGrey