2013-09-29 132 views
0

在日期維度,我要計算WorkingDaysToDate屬性,以表示從本月開始工作日內到今天的總數量,例如說如何計算日期維度工作日

今天是9月27日(星期五),然後

WorkingDaysToDate是在一個月內任職日期到今天的總數減去任何週末和公共假期

而且結果應該是:

9月27日(星期五):20個工作日內, 9月28日(星期六):20, 9月29日(星期日):20個工作日內, 9月30日(星期一),那麼就應該有21個工作日內 等

我得到正確的結果,對於當前使用天下面的代碼,但我想計算日期維度的所有日期:

WITH CTE AS 
( 
select * from dbo.Date_Dimension 
where DATEPART(MONTH,GETDATE()) = CalendarMonthNumber 
AND DATEPART(year,getdate()) = CalendarYearNumber 
AND Fulldate between DATEADD(Month,DateDiff(Month,0,Getdate()),0) 
AND convert (Date, GETDATE()) 
AND HolidayFlag = 0 
AND WeekDayFlag = 1 ) 


Select COUNT (*) AS WorkingDayToDate from CTE 

而且如前所述,這會給我造成只對當前日期,但我想計算和存儲所有日期在日期維度

有人可以請幫助

請參見下面的創建表的代碼和樣品插入代碼來填充日期維度以加快執行速度:

創建Date_dimension表,使用下面的代碼:

CREATE TABLE [dbo].[Date_Dimension](
[DateSK] [int] NOT NULL, 
[FullDate] [datetime] NOT NULL, 
[Day] [tinyint] NOT NULL, 
[DaySuffix] [varchar](4) NOT NULL, 
[DayOfWeek] [varchar](9) NOT NULL, 
[DayOfWeekNumber] [int] NOT NULL, 
[DayOfWeekInMonth] [tinyint] NOT NULL, 
[DayOfYearNumber] [int] NOT NULL, 
[RelativeDays] [int] NOT NULL, 
[WeekOfYearNumber] [tinyint] NOT NULL, 
[WeekOfMonthNumber] [tinyint] NOT NULL, 
[RelativeWeeks] [int] NOT NULL, 
[CalendarMonthNumber] [tinyint] NOT NULL, 
[CalendarMonthName] [varchar](9) NOT NULL, 
[RelativeMonths] [int] NOT NULL, 
[CalendarQuarterNumber]  [tinyint] NOT NULL, 
[CalendarQuarterName]  [varchar](6) NOT NULL, 
[RelativeQuarters]  [int] NOT NULL, 
[CalendarYearNumber]  [int] NOT NULL, 
[RelativeYears]  [int] NOT NULL, 
[StandardDate]  [varchar](10) NULL, 
[WeekDayFlag]  [bit] NOT NULL, 
[HolidayFlag]  [bit] NOT NULL, 
[OpenFlag]  [bit] NOT NULL, 
[FirstDayOfCalendarMonthFlag]  [bit] NOT NULL, 
[LastDayOfCalendarMonthFlag]  [bit] NOT NULL, 
[HolidayText]  [varchar](50) NULL, 
CONSTRAINT  [PK_DimDate] PRIMARY KEY CLUSTERED 
(
[DateSK] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON  [PRIMARY] 
) ON  [PRIMARY] 

GO 

並填充樣本數據,你可以使用下面的代碼:

INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130901,'2013-09-01 00:00:00.000',1,'1st','Sunday',1,1,244,-26,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/01/2013',0,0,0,1,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130902,'2013-09-02 00:00:00.000',2,'2nd','Monday',2,1,245,-25,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/02/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130903,'2013-09-03 00:00:00.000',3,'3rd','Tuesday',3,1,246,-24,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/03/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130904,'2013-09-04 00:00:00.000',4,'4th','Wednesday',4,1,247,-23,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/04/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130905,'2013-09-05 00:00:00.000',5,'5th','Thursday',5,1,248,-22,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/05/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130906,'2013-09-06 00:00:00.000',6,'6th','Friday',6,1,249,-21,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/06/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130907,'2013-09-07 00:00:00.000',7,'7th','Saturday',7,1,250,-20,36,1,-3,9,'September',0,3,'Third',0,2013,0,'09/07/2013',0,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130908,'2013-09-08 00:00:00.000',8,'8th','Sunday',1,2,251,-19,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/08/2013',0,0,0,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130909,'2013-09-09 00:00:00.000',9,'9th','Monday',2,2,252,-18,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/09/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130910,'2013-09-10 00:00:00.000',10,'10th','Tuesday',3,2,253,-17,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/10/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130911,'2013-09-11 00:00:00.000',11,'11th','Wednesday',4,2,254,-16,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/11/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130912,'2013-09-12 00:00:00.000',12,'12th','Thursday',5,2,255,-15,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/12/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130913,'2013-09-13 00:00:00.000',13,'13th','Friday',6,2,256,-14,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/13/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130914,'2013-09-14 00:00:00.000',14,'14th','Saturday',7,2,257,-13,37,2,-2,9,'September',0,3,'Third',0,2013,0,'09/14/2013',0,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130915,'2013-09-15 00:00:00.000',15,'15th','Sunday',1,3,258,-12,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/15/2013',0,0,0,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130916,'2013-09-16 00:00:00.000',16,'16th','Monday',2,3,259,-11,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/16/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130917,'2013-09-17 00:00:00.000',17,'17th','Tuesday',3,3,260,-10,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/17/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130918,'2013-09-18 00:00:00.000',18,'18th','Wednesday',4,3,261,-9,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/18/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130919,'2013-09-19 00:00:00.000',19,'19th','Thursday',5,3,262,-8,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/19/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130920,'2013-09-20 00:00:00.000',20,'20th','Friday',6,3,263,-7,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/20/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130921,'2013-09-21 00:00:00.000',21,'21st','Saturday',7,3,264,-6,38,3,-1,9,'September',0,3,'Third',0,2013,0,'09/21/2013',0,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130922,'2013-09-22 00:00:00.000',22,'22nd','Sunday',1,4,265,-5,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/22/2013',0,0,0,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130923,'2013-09-23 00:00:00.000',23,'23rd','Monday',2,4,266,-4,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/23/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130924,'2013-09-24 00:00:00.000',24,'24th','Tuesday',3,4,267,-3,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/24/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130925,'2013-09-25 00:00:00.000',25,'25th','Wednesday',4,4,268,-2,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/25/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130926,'2013-09-26 00:00:00.000',26,'26th','Thursday',5,4,269,-1,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/26/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130927,'2013-09-27 00:00:00.000',27,'27th','Friday',6,4,270,0,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/27/2013',1,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130928,'2013-09-28 00:00:00.000',28,'28th','Saturday',7,4,271,1,39,4,0,9,'September',0,3,'Third',0,2013,0,'09/28/2013',0,0,1,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130929,'2013-09-29 00:00:00.000',29,'29th','Sunday',1,5,272,2,40,5,1,9,'September',0,3,'Third',0,2013,0,'09/29/2013',0,0,0,0,0,NULL) 
INSERT INTO Date_dimension(DateSK,FullDate,Day,DaySuffix,DayOfWeek,DayOfWeekNumber,DayOfWeekInMonth,DayOfYearNumber,RelativeDays,WeekOfYearNumber,WeekOfMonthNumber,RelativeWeeks,CalendarMonthNumber,CalendarMonthName,RelativeMonths,CalendarQuarterNumber,CalendarQuarterName,RelativeQuarters,CalendarYearNumber,RelativeYears,StandardDate,WeekDayFlag,HolidayFlag,OpenFlag,FirstDayOfCalendarMonthFlag,LastDayOfCalendarMonthFlag,HolidayText) VALUES (20130930,'2013-09-30 00:00:00.000',30,'30th','Monday',2,5,273,3,40,5,1,9,'September',0,3,'Third',0,2013,0,'09/30/2013',1,0,1,0,1,NULL) 

回答

2

窗口函數與OVER() clause可以使您的要求快速的工作。請注意,這僅適用於SQL 2012及更高版本,ROWS UNBOUNDED PRECEDING是2012年的新功能。

此問題的關鍵是ROWS UNBOUNDED PRECEDING與PARTITION BY子句結合使用。這就是說,按年份和月份分組,然後根據我的個案陳述標準,在該年份 - 月份組合中總結工作日。

SQL Server 2012的優化

select 
    fulldate, 
    sum(case 
     when holidayFlag = 0 and weekdayFlag = 1 then 1 
     else 0 
     end) over(partition by year(fulldate), month(fulldate) 
       order by fulldate 
       ROWS UNBOUNDED PRECEDING) 
from date_dimension 

SQL Fiddle for 2012 Version

SQL Server 2008中

-- This will be slower than 2012 version 
select 
    d1.fulldate, 
    (select 
    sum(case 
      when d2.holidayFlag = 0 and d2.weekdayFlag = 1 then 1 
      else 0 
     end) 
    from date_dimension d2 
    where d1.fulldate >= d2.fulldate 
    and year(d1.fulldate) = year(d2.fulldate) 
    and month(d1.fulldate) = month(d2.fulldate)) x 
from date_dimension d1 
group by d1.fulldate 

SQL Fiddle for 2008 Version

在2008年做到這一點的最快方式是光標看到Calculate a Running Total in SqlServer。但是,對於您的要求,這應該工作得很好。

+0

非常感謝您的及時響應,但我們仍在使用SQL 2008. SQL 2008版可能的解決方案版本 – user2827587

+0

歡迎您編輯包含2008版本的答案。 – bdeem

+0

非常感謝,非常感謝您的幫助:) – user2827587