0
で出席します:私はこのような任意の月の出席を見つけようとしています月の名前
DECLARE @StartDate DATE
DECLARE @EndDate DATE
SET @StartDate = '2016/10/01'
SET @EndDate = '2016/10/31'
SELECT
StaffAttendance.StaffId, DATENAME(MONTH, @StartDate) AS [ForMonth],
(DATEDIFF(dd, @StartDate, @EndDate) + 1)
-(DATEDIFF(wk, @StartDate, @EndDate) * 1)
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END) AS TotalWorkingDays,
SUM(StaffAttendance.AttendanceStatusId) AS TotalDaysWorked FROM StaffAttendance WHERE [Date] BETWEEN @StartDate AND @EndDate AND StaffAttendance.AttendanceStatusId = 1 GROUP BY StaffAttendance.StaffId
そして、これは私がちゃんとある、取得していますものです。
は、私は次のやりたいことは代わりのような日付範囲(@StartDateのDATE、@EndDate DATE)と使用の月名を省略している - 「10月」と'10などのない月の番号「。ユーザーが月名を指定し、その月の開始日と終了日が自動的に計算されます。フェリックス・パミットンの助けがありました。
DECLARE @month VARCHAR(9) = 'february';
WITH CteMonths(n, m) AS(
SELECT 1, 'January' UNION ALL
SELECT 2, 'February' UNION ALL
SELECT 3, 'March' UNION ALL
SELECT 4, 'April' UNION ALL
SELECT 5, 'May' UNION ALL
SELECT 6, 'June' UNION ALL
SELECT 7, 'July' UNION ALL
SELECT 8, 'August' UNION ALL
SELECT 9, 'September' UNION ALL
SELECT 10, 'October' UNION ALL
SELECT 11, 'November' UNION ALL
SELECT 12, 'December'
)
SELECT
DATEADD(MONTH, n - 1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)) AS StartDate,
DATEADD(DAY, -1, DATEADD(MONTH, n, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))) AS EndDate
FROM CteMonths
WHERE m = @month
ここで、これら2つを組み合わせて上記と同じ結果を得るにはどうすればよいですか?