人事の役割を格納する SQL Server にタイムシート テーブルがあります。
CREATE TABLE [dbo].[TimeSheetTable](
[pk_TimeSheetID] [bigint] IDENTITY(1,1) NOT NULL,
[fk_PersonelID] [int] NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NOT NULL,
[fk_RoleID] [int] NOT NULL,
[Comments] [nvarchar](2000) NULL,
[dateCreated] [datetime] NOT NULL,
[CreatedBy] [int] NULL,
場合によっては、従業員が 2012 年 10 月 28 日から 2012 年 11 月 2 日まで、月が重複して休暇を取ることがあります。上記の例では、従業員は 10 月に 4 日、11 月に 3 日ありました。
私の問題は、それぞれの休暇の日数をカウントするクエリを作成することです。終了日が月を超える場合、それはカウントされません。
SELECT TOP 1000
sum(DATEDIFF(day,startdate,EndDate))
FROM [db_ASCO_Personel].[dbo].[TimeSheetTable]
where fk_RoleID=51 /* how do I count leave days that over lap between two months*/
行番号 17 には、11 月に 1 日、12 月に 2 日 (合計 3 日間の休暇) があります。各従業員が 1 か月だけ取得した休暇の日数をどのように数えますか?
TimeSheetID StartDate EndDate RoleID コメント dateCreated CreatedBy
15 2012 年 8 月 6 日 2012 年 8 月 7 日 51 03:10.6 NULL 16 2012 年 8 月 1 日 2012 年 8 月 2 日 51 03:31.5 NULL 17 2012 年 11 月 29 日 2012 年 12 月 3 日 51 51:15.5 NULL