Я построил матрицу, которая объединяет записи из нескольких отделов в группы отделов. Я пытаюсь создать подробный отчет. У меня возникают проблемы при попытке преобразовать имя группы отделов, переданное в качестве параметра для детализации, в отдельные номера отделов, которые составляют группу.
Использование SQL Server 2012 с MS Report Builder 3.0.
Попытка использования оператора CASE в предложении WHERE для возврата номеров отделов, связанных с именем группы отделов, переданным в параметре. Это работает для групп отделов, которые содержат один номер отдела, но с ошибками, если группа отделов содержит более одного отдела.
Этот код работает для групп отделов из одного отдела, но завершается неудачно, если в утверждение дела входят группы из нескольких отделов.
NPD.ACT_DEPTARTMENT IN (CASE
WHEN @DEPT = 'Business Group' THEN ('40', '43', '45', '46', '47', '83', '84', '85', '86', '87', '89', '90')
WHEN @DEPT = 'Chemistry Group' THEN ('06', '07')
WHEN @DEPT = 'Emergency Prep' THEN ('33')
WHEN @DEPT = 'Engineering Group' THEN ('60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72')
WHEN @DEPT = 'Maintain Group' THEN ('21', '22', '23', '24', '25', '26', '76', '78')
WHEN @DEPT = 'Management Group' THEN ('36', '48', '80', '81', '88', '96')
WHEN @DEPT = 'Operations Group' THEN ('11', '12', '13')
WHEN @DEPT = 'Projects Group' THEN ('54', '73', '79')
WHEN @DEPT = 'Security' THEN ('34')
WHEN @DEPT = 'Supply Group' THEN ('50', '98')
WHEN @DEPT = 'Training Group' THEN ('82', '91', '92', '93', '94', '95')
END)
Первоначально пробовал этот код, но не мог заставить его работать. Поиск в Google показал, что я пытался заставить CASE выполнить код, а не просто вернуть часть выражения "IN"
.
AND CASE WHEN @DEPT = 'Business Group' THEN NPD_ACT.DEPARTMENT IN ('40', '43', '45', '46', '47', '83', '84', '85', '86', '87', '89', '90')
WHEN @DEPT = 'Chemistry Group' THEN NPD_ACT.DEPARTMENT IN ('06', '07')
WHEN @DEPT = 'Emergency Prep' THEN NPD_ACT.DEPARTMENT IN ('33')
WHEN @DEPT = 'Engineering Group' THEN NPD_ACT.DEPARTMENT IN ('60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72')
WHEN @DEPT = 'Maintain Group' THEN NPD_ACT.DEPARTMENT IN ('21', '22', '23', '24', '25', '26', '76', '78')
WHEN @DEPT = 'Management Group' THEN NPD_ACT.DEPARTMENT IN ('36', '48', '80', '81', '88', '96')
WHEN @DEPT = 'Operations Group' THEN NPD_ACT.DEPARTMENT IN ('11', '12', '13')
WHEN @DEPT = 'Security' THEN NPD_ACT.DEPARTMENT IN ('34')
WHEN @DEPT = 'Supply Group' THEN NPD_ACT.DEPARTMENT IN ('50', '98')
WHEN @DEPT = 'Training Group' THEN NPD_ACT.DEPARTMENT IN ('82', '91', '92', '93', '94', '95')
END
Ошибка возвращается
"Неверный синтаксис рядом с ','."
Ошибка возвращается для первой строки оператора CASE.