Wendelius
Если я правильно понял вопрос, у вас есть таблица, содержащая отдельный столбец для каждого дня недели?
Если это так, я бы предложил другую структуру. Вместо использования отдельных столбцов используйте строки. Другими словами стол может выглядеть примерно так
DutyTable
---------
- Столбец empname
- Будний день
- DutyType
А данные могут быть примерно такими (1 = воскресенье, 7 = суббота)
EmpName Weekday DutyType
------- ------- --------
Mr Smith 1 A
Mr Smith 2 M
Mr Smith 3 M
Mr Smith 4 M
Mr Smith 5 M
Mr Smith 6 M
Mr Smith 7 B
Теперь ваш запрос может выглядеть примерно так
SELECT EmpName,
SUM(CASE DutyType
WHEN 'M' THEN 1
ELSE 0
END)
FROM DutyTable
GROUP BY EmpName
Это всего лишь простой пример, поэтому вам, вероятно, нужно добавить соответствующие столбцы в соответствии с вашими требованиями.
ДОПОЛНЕНИЕ:
---------
Рассмотрим следующий пример
CREATE TABLE DutyTest (
DutyId int,
EmpName varchar(100),
DayId int,
DutyType char
);
INSERT INTO DutyTest VALUES
(1, 'Mr Smith', 1, 'M'),
(2, 'Mr Smith', 2, 'M'),
(3, 'Mr Smith', 3, 'M'),
(4, 'Mr Smith', 4, 'M'),
(5, 'Mr Smith', 5, 'A'),
(6, 'Mr Smith', 6, 'D'),
(7, 'Mr Smith', 7, 'A'),
(8, 'Mr Wick', 1, 'A'),
(9, 'Mr Wick', 2, 'A'),
(10, 'Mr Wick', 3, 'D'),
(11, 'Mr Wick', 4, 'A'),
(12, 'Mr Wick', 5, 'M'),
(13, 'Mr Wick', 6, 'A'),
(14, 'Mr Wick', 7, 'A');
SELECT EmpName,
SUM(CASE DutyType
WHEN 'M' THEN 1
ELSE 0
END) AS M_Days
FROM DutyTest
GROUP BY EmpName;
Результат для запроса будет следующим
EmpName M_Days
-------- ------
Mr Smith 4
Mr Wick 1
Дополнение 2
-----------
Для запроса текущей таблицы в базе данных можно использовать что-то вроде следующего
CREATE TABLE DutyTest2 (
DutyId int,
EmpName varchar(100),
Sunday char,
Monday char,
Tuesday char,
Wednesday char,
Thursday char,
Friday char,
Saturday char
);
INSERT INTO DutyTest2 VALUES
(1, 'Mr Smith', 'M', 'M', 'M', 'M', 'A', 'D', 'A'),
(2, 'Mr Smith', 'M', 'M', 'D', 'A', 'A', 'D', 'A'),
(3, 'Mr Wick', 'A', 'A', 'A', 'M', 'A', 'D', 'A'),
(4, 'Mr Wick', 'M', 'M', 'D', 'A', 'M', 'M', 'A');
SELECT DutyId,
EmpName,
SUM(CASE Sunday WHEN 'M' THEN 1 ELSE 0 END
+ CASE Monday WHEN 'M' THEN 1 ELSE 0 END
+ CASE Tuesday WHEN 'M' THEN 1 ELSE 0 END
+ CASE Wednesday WHEN 'M' THEN 1 ELSE 0 END
+ CASE Thursday WHEN 'M' THEN 1 ELSE 0 END
+ CASE Friday WHEN 'M' THEN 1 ELSE 0 END
+ CASE Saturday WHEN 'M' THEN 1 ELSE 0 END) AS M_Days
FROM DutyTest2
GROUP BY DutyId,
EmpName;
Запрос должен произвести
DutyId EmpName M_Days
------ -------- ------
1 Mr Smith 4
2 Mr Smith 2
3 Mr Wick 1
4 Mr Wick 4
Надеюсь, это поможет
Member 11398913
большое спасибо за Вашу поддержку, но у меня есть много данных в моей таблице, я не могу изменить структуру, я потеряю daa и время, чтобы сделать это, я пробую этот код и его почти работу, но все равно итого, не считая общих дней, я надеюсь, что кто-то поможет на этом последнем шаге.
Объявить @DayCount int =0
Объявить @DayCount2 int =0
Объявить @DayCount3 int =0
Объявить @DayCount4 int =0
Объявить @DayCount5 int =0
Объявить @DayCount6 int =0
Объявить @DayCount7 int =0
Объявить @Totsi int =0
ВЫБИРАТЬ
Дежурство,Суббота,
Воскресенье,Понедельник,Вторник,Среда,Четверг,Пятница,
(Случай, когда в субботу = 'M', то @все компоненты корпоративной сети +1 еще @компоненты корпоративной сети-энд) День1,
(Случай, когда воскресенье = 'M', то @DayCount2 +1 ELSE @DayCount2 END) Day2,
(Случай, когда Понедельник = 'M', то @DayCount3 +1 ELSE @DayCount3 END) Day3,
(Случай, когда вторник = 'M', то @DayCount4 +1 ELSE @DayCount4 END) Day4,
(Случай, когда среда = 'M', то @DayCount5 +1 ELSE @DayCount5 END) Day5,
(Случай, когда четверг = 'M', то @DayCount6 +1 ELSE @DayCount6 END) Day6,
(Случай, когда пятница = 'M', то @DayCount7 +1 ELSE @DayCount7 END) Day7,
Сумма(@DayCount + @DayCount2 + @DayCount3 +
@DayCount4 + @DayCount5 + @DayCount6 + @DayCount7) Суммы
Из MATRONDutyView
Группа По
Дежурство,Суббота,
Воскресенье,Понедельник,Вторник,Среда,Четверг,Пятница
ИМЕЮЩИЙ
DutyID < & gt; 1 ;