Как я могу заменить большое количество выражений переменной или псевдонимом? - PullRequest
2 голосов
/ 29 января 2011

Это может быть довольно простой вопрос, однако я не могу найти ответ на этом сайте (или любом другом).

У меня довольно большое выражение CASE, которое мне нужно использовать в скрипте несколько раз. Мой скрипт выглядит примерно так:

 SELECT
    CASE 
        WHEN ...
        WHEN ...
        ...
    END as long_case_expression
FROM table
GROUP BY
CASE 
        WHEN ...
        WHEN ...
        ...
        END

Было бы намного проще, если бы я мог заменить это большое количество выражений WHEN переменной или псевдонимом. Таким образом, мой сценарий не будет раздут большим количеством выражений КОГДА, и мне нужно только редактировать в одном месте. Итак, я хочу, чтобы это выглядело так:

SELECT
   CASE
       @tinyvariable
   END
FROM table
GROUP BY
   CASE
       @tinyvariable
   END

Я попытался просто объявить @tinyvariable в качестве VARCHAR и установить @tinyvariable равным огромной строке выражений WHEN, но, думаю, SQL это не нравится. Итак, мне нужна помощь кого-то, кто знает, что они делают. Пожалуйста, помогите.

Как примечание, я использую SQL Server 2008.

Ответы [ 2 ]

6 голосов
/ 29 января 2011

Почему бы вам не обернуть SQL с CASE в другой SELECT, а затем применить группу, используя псевдоним.т.е.:

SELECT long_case_expression, COUNT(1)
  FROM
(
SELECT
    CASE 
        WHEN ...
        WHEN ...
        ...
    END as long_case_expression
FROM table
) a
GROUP BY long_case_expression
0 голосов
/ 29 января 2011

Вы потеряете немного эффективности, но создание функций, инкапсулирующих логику оператора CASE, определенно облегчит чтение кода

SELECT function_name( <<parameter list>> )
  FROM table
 GROUP BY function_name( <<parameter list>> )

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

SELECT
   CASE
       WHEN ...
       WHEN ...
       ...
   END
FROM table
GROUP BY 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...