SQL Server - 任何等效的Excel的CHOOSE功能?

时间:2015-04-24 11:01:15

标签: sql-server sql-server-2008

如果以前没有问过这件事,我会感到惊讶,但我找不到任何东西。 Excel有一个功能

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

但有什么不那么麻烦吗?

2 个答案:

答案 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中并没有真正优化。