这可能是一个相当简单的问题,但我无法在本网站(或任何其他网站)找到答案。
我有一个相当大的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。
答案 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