Составьте таблицу с выходными для каждой страны:
CREATE TABLE Holidays
(
Country INT NOT NULL,
[Date] DATE NOT NULL,
CONSTRAINT PK_Holidays PRIMARY KEY CLUSTERED (Country, [Date])
)
Затем создайте CTE , чтобы перечислить все дни между двумя датами:
WITH Dates ([Date] Date)
AS
(
SELECT @StartDate
UNION ALL
SELECT DATEADD(DAY, @StartDate, 1)
FROM Dates Where Dates.Date < @EndDate
)
SELECT COUNT(1) FROM Dates
WHERE [Date] NOT IN (SELECT [Date] from Holidays WHERE Country = @CountryCode)
AND DATEPART(WeekDay, [Date]) NOT IN (6,7)
WITH (MAXRECURSION = 10000)
Это будетдать вам количество рабочих дней.Запрос CTE создает список всех дат между @StartDate и @EndDate, а затем отфильтровывает те даты, которые указаны как праздники для конкретной страны и не являются рабочим днем № 6 или 7 (который, я думаю, сопоставляется с субботой и воскресеньем).