По сути, я пытаюсь рассчитать общее количество часов, которое может иметь пользователь, исходя из их смены и количества введенных дней.
Пример: начало смены 13 сентября 2020 года. Я знаю, что это неделя 1, воскресенье (на основе других расчетов). Так что мне нужно взять 2 из воскресенья, а затем 3, 2, 1, 1, 1, 2 из недели 2 в таблице ROTA.
Всего 7 дней: неделя 1 = воскресенье неделя 2 = пн, вт, ср, чт, пт, сб
ROTA table
+------+-----+-----+-----+-----+-----+-----+-----+
| WEEK | MON | TUE | WED | THU | FRI | SAT | SUN |
+------+-----+-----+-----+-----+-----+-----+-----+
| 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 2 | 3 | 2 | 1 | 1 | 1 | 2 | 1 |
| 3 | 1 | 2 | 1 | 1 | 1 | 1 | 1 |
| 4 | 1 | 1 | 1 | 1 | 2 | 1 | 1 |
| 5 | 1 | 1 | 2 | 1 | 1 | 1 | 1 |
+------+-----+-----+-----+-----+-----+-----+-----+
Приведенные выше числа хранятся в таблице смен. Таким образом, для моих 7 дней это будет 2, 3, 2, 1, 1, 1, 2 = 51,5 полных часа за 7 дней.
SHIFTS Table
+-------+-------+
| SHIFT | HOURS |
+-------+-------+
| 1 | 8.5 |
| 2 | 6 |
| 3 | 8 |
+-------+-------+
Я делаю цикл WHILE, чтобы получить неделю и необходимые столбцы. Так что для приведенного выше примера мне понадобится только столбец SUN из таблицы ROTA. Следующий цикл даст мне ПН-СБ.
Сначала я пытался объединить две строки вместе, тогда я мог сделать какой-то подсчет. Итак, есть 3x SHIFT 2, 1x SHIFT 3 и 3x SHIFT 1. Тогда я могу получить общее количество часов, но не знаю, как это сделать.
В тот момент, когда мой запрос завершен, я получаю следующие две строки:
LOOP 1:
+-----+
| SUN |
+-----+
| 2 |
+-----+
LOOP 2:
+-----+-----+-----+-----+-----+-----+
| MON | TUE | WED | THU | FRI | SAT |
+-----+-----+-----+-----+-----+-----+
| 3 | 2 | 1 | 1 | 1 | 2 |
+-----+-----+-----+-----+-----+-----+
Я немного сократил свой запрос, но суть его в следующем:
WHILE @cnt <= @totalDays
BEGIN
IF @dayOfWeek = 1 SET @columnList = 'SUN' ELSE
IF @tempTotalDays >= 7 SET @columnList = 'MON, TUE, WED, THU, FRI, SAT, SUN' ELSE
IF @tempTotalDays = 6 SET @columnList = 'MON, TUE, WED, THU, FRI, SAT' ELSE
IF @tempTotalDays = 5 SET @columnList = 'MON, TUE, WED, THU, FRI' ELSE
IF @tempTotalDays = 4 SET @columnList = 'MON, TUE, WED, THU' ELSE
IF @tempTotalDays = 3 SET @columnList = 'MON, TUE, WED' ELSE
IF @tempTotalDays = 2 SET @columnList = 'MON, TUE' ELSE
IF @tempTotalDays = 1 SET @columnList = 'MON'
SET @sqlCommand = 'select '+ @columnList +' from dbo.ROTA
where WEEK = @rotaWeek'
EXEC sp_executesql @sqlCommand, N'@rotaWeek nvarchar(75), @rotaWeek = @rotaWeek
END;
GO
Как видите, я почти у цели. Я просто не знаю, как взять свои результаты и выбрать часы из таблицы SHIFTS. Любая помощь будет оценена по достоинству.
CASE
в частиSELECT
запроса. - person Panagiotis Kanavos   schedule 20.09.2020