CHOOSE(n, x_1, x_2, x_3, ...)
为给定的n值返回x_n。
SQL Server 2008是否支持SQL(标准或MS特定)类似的内容?我知道它应该真的使用数据库中的查找表来实现,但是对于我正在做的事情,我无法将新表添加到数据库中。
我可以创建一个临时表并从SQL脚本中填充它,或者使用
CASE n WHEN 1 THEN x_1 WHEN 2 THEN x_2 WHEN 3 THEN x_3 ... END
但有什么不那么麻烦吗?
答案 0 :(得分:5)
不幸的是,似乎不是你的版本中的礼物。
CHOOSE
-Function仅在SQL Server 2012之后可用,并且与描述Excel函数的工作原理完全相同。
答案 1 :(得分:2)
“但是对于我正在做的事情,我无法将新表格添加到数据库”。那么你总是可以使用临时表,表变量,或者,如果它真的是一次性的东西 - 派生表:
select
...,
l.v
from <your table> as t
left outer join (values
(1, x_1), (2, x_2), (3, x_3)
) as l(n, v) on l.n = t.n
当然,您始终可以尝试创建自己的choose()
功能:
create function dbo.f_Choose5(
@index int,
@value1 sql_variant,
@value2 sql_variant,
@value3 sql_variant,
@value4 sql_variant,
@value5 sql_variant
)
returns sql_variant
as
begin
return (
case @index
when 1 then @value1
when 2 then @value2
when 3 then @value3
when 4 then @value4
when 5 then @value5
end
)
end
select dbo.f_Choose5(3, 1, 2 ,3, 4, 5)
select dbo.f_Choose5(3, 1, 2 ,3, default, default)
但是你必须记住,标量函数在SQL Server中并没有真正优化。