Как преобразовать параметр одного выбора в несколько значений фильтра в SQL? - PullRequest
0 голосов
/ 11 июля 2019

Я построил матрицу, которая объединяет записи из нескольких отделов в группы отделов. Я пытаюсь создать подробный отчет. У меня возникают проблемы при попытке преобразовать имя группы отделов, переданное в качестве параметра для детализации, в отдельные номера отделов, которые составляют группу.

Использование 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.

1 Ответ

0 голосов
/ 11 июля 2019

Предполагая, что @DEPT содержит только одно название отдела:

Вам нужно будет переключиться между тем, что находится внутри / за пределами оператора case.

@DEPT = (CASE WHEN NPD.ACT_DEPTARTMENT IN ('40', '43', '45', '46', '47', '83', '84', '85', '86', '87', '89', '90') THEN 'Business Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('06', '07') THEN 'Chemistry Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('33') THEN 'Emergency Prep'
              WHEN NPD.ACT_DEPTARTMENT IN ('60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72') THEN 'Engineering Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('21', '22', '23', '24', '25', '26', '76', '78') THEN 'Maintain Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('36', '48', '80', '81', '88', '96') THEN 'Management Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('11', '12', '13') THEN 'Operations Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('54', '73', '79') THEN 'Projects Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('34') THEN 'Security'
              WHEN NPD.ACT_DEPTARTMENT IN ('50', '98') THEN 'Supply Group'
              WHEN NPD.ACT_DEPTARTMENT IN ('82', '91', '92', '93', '94', '95') THEN 'Training Group'
         END)

Это может честно использоватьтаблица перевода с группой отдела и номерами отдела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...