2012-02-09 2 views
0

помогите пожалуйста.Количество рабочих дней между сегодняшним днем ​​и рабочим днем ​​до конца года

Попытка рассчитать количество рабочих дней между сегодняшним днем ​​и количеством работающих говорит до конца года в SQL.

Я начал с нижнего ... Дата разницы только количество дней между сегодня и до конца года .. но мне нужно это для рабочих дней - то есть где cal.Weekday = '' ИЛИ ​​HOLIDAY.DateInfo >» '

CASe 
    when cal.Weekday = ' 'OR HOLIDAY.DateInfo>' ' then 0 else 1 end as workingdays, 
    DateDiff("y",GETDATE(),DATEADD(s,-1,DATEADD(YY, DATEDIFF(YYYY,0,@StartDate)+1,0))) as enddateddd, 
+1

A рабочий день определяется как понедельник - пятница, за исключением праздников? – Yuck

+0

Да, следовательно, cal.Weekday = '' OR HOLIDAY.DateInfo> '', заказывающие только за рабочие дни, и когда я его суммирую, я получаю 249 – user1143563

+0

У вас есть календарь и (отдельный) праздничный стол? Можем ли мы увидеть эти макеты, пожалуйста? –

ответ

1

Это даст вам рабочие дни (MF только), как и для holdays я понятия не имею, что ваши праздники, так что вам нужно добавить, что часть:

DECLARE @today AS DATE = GETDATE(); 
DECLARE @firstOfNextYear AS DATE = CAST('1/1/' + STR(1 + YEAR(GETDATE())) AS DATE); 

WITH L0 AS (SELECT 1 AS C UNION ALL SELECT 1),  --  2 
    L1 AS (SELECT L0.C FROM L0 CROSS JOIN L0 AS B), --  4 
    L2 AS (SELECT L1.C FROM L1 CROSS JOIN L1 AS B), --  16 
    L3 AS (SELECT L2.C FROM L2 CROSS JOIN L2 AS B), -- 256 
    L4 AS (SELECT L3.C FROM L3 CROSS JOIN L3 AS B), -- 65536 
     N AS (SELECT ROW_NUMBER() OVER(ORDER BY L4.C) AS n FROM L4), 
     D AS (SELECT DATEADD(DAY, n - 1, @today) AS d, n FROM N) 
SELECT COUNT(*) FROM D 
WHERE d < @firstOfNextYear 
    AND DATEPART(WEEKDAY, d) BETWEEN 2 AND 6 
+0

Спасибо, попробуем это – user1143563

Смежные вопросы