ДЕЛО внутри GROUP BY - PullRequest
       0

ДЕЛО внутри GROUP BY

1 голос
/ 25 марта 2011

Как можно выборочно выбрать столбцы для группировки по?Могу ли я использовать CASE внутри него.Он хорошо компилируется, но не работает во время выполнения.

пример:

GROUP BY o.organization_name ol.org_level_name, work_date,
 CASE WHEN @org_level_type = 'Department' THEN jd.job_code ELSE jd.job_department_id END

Спасибо.

1 Ответ

0 голосов
/ 25 марта 2011

Отредактированный ответ

Это, вероятно, не очень хорошая идея.Просто разделите его на 2 отдельных запроса, чтобы избежать ненужных операций сортировки с одним размером, подходящим для всех запросов.

Вы можете поместить большую часть запроса, выполняющего объединения в таблицы o, jd, ol (без GROUP BY), в представление, чтобы избежать необходимости повторять это.

Оригинальный ответ

(при условии, что 2 столбца имеют совместимые типы данных)

select o.organization_name,
       ol.org_level_name,
       work_date,
       code_or_dept
FROM   ...
       CROSS APPLY (SELECT CASE
                             WHEN @org_level_type = 'Department' THEN
                             jd.job_code
                             ELSE jd.job_department_id
                           END AS code_or_dept) c
GROUP  BY o.organization_name,
          ol.org_level_name,
          work_date,
          code_or_dept  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...