如何用变量或别名替换大量表达式?

时间:2011-01-28 23:40:34

标签: sql tsql

这可能是一个相当简单的问题,但我无法在本网站(或任何其他网站)找到答案。

我有一个相当大的CASE表达式,我需要在脚本中多次使用。我的脚本看起来像这样:

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

如果我可以用变量或别名替换大量的WHEN表达式,那将使我的生活变得更加容易。这样,我的脚本不会膨胀很多WHEN表达式,我只需要在一个地方进行编辑。所以,我希望它看起来像:

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

我尝试将@tinyvariable声明为VARCHAR并将@tinyvariable设置为等于WHEN表达式的大字符串,但我猜SQL不喜欢这样。所以,我需要知道自己在做什么的人的帮助。请帮忙。

作为一个说明,我正在使用SQL Server 2008。

2 个答案:

答案 0 :(得分:6)

为什么不在另一个SELECT中使用CASE包装SQL,然后使用别名应用该组。即:

SELECT long_case_expression, COUNT(1)
  FROM
(
SELECT
    CASE 
        WHEN ...
        WHEN ...
        ...
    END as long_case_expression
FROM table
) a
GROUP BY long_case_expression

答案 1 :(得分:0)

你会失去一点效率,但创建封装CASE语句逻辑的函数肯定会使代码更容易阅读

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

我一般不会推荐的另一种选择,因为它可以使你的查询相当脆弱,那就是使用序数位置表示法,即

SELECT
   CASE
       WHEN ...
       WHEN ...
       ...
   END
FROM table
GROUP BY 1