你可以在WorkSchedule嘗試UNPIVOT
,並加入到您的DATENAME查詢則DateValue ..然後你只值相加
;WITH
L0 AS (SELECT 1 AS c UNION ALL SELECT 1),
L1 AS (SELECT 1 AS c FROM L0 A CROSS JOIN L0 B),
L2 AS (SELECT 1 AS c FROM L1 A CROSS JOIN L1 B),
L3 AS (SELECT 1 AS c FROM L2 A CROSS JOIN L2 B),
L4 AS (SELECT 1 AS c FROM L3 A CROSS JOIN L3 B),
Nums AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS i FROM L4),
Schedule AS (
SELECT *
FROM [WorkerSchedule]
UNPIVOT (
Working
FOR [WorkDay] IN ([Sunday], [Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday])
) u
)
SELECT s.WorkerId, SUM(s.Working) ScheduledDays
FROM Schedule s
INNER JOIN (SELECT DATENAME(weekday, DATEADD(DAY, i - 1, @StartDate)) AS DateValue
FROM Nums
WHERE i <= 1 + DATEDIFF(DAY, @StartDate, @EndDate)) d ON s.[WorkDay] = d.DateValue
WHERE s.Working = 1
GROUP BY s.WorkerId
謝謝,我不得不使用s.Working> 0,因爲該列可以包含任何數字(這基本上意味着工人在那一天有多少輪班) – ilitirit