我有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