SQL Server – un équivalent de la fonction CHOOSE d'Excel?

Je serais surpris si cela n'a pas été demandé auparavant, mais je n'ai pas été en mesure de find quelque chose. Excel a une fonction

CHOOSE(n, x_1, x_2, x_3, ...) 

qui renvoie x_n pour la valeur donnée de n.

Y a-t-il quelque chose de similaire en SQL (standard ou spécifique à MS) supporté par SQL Server 2008? Je sais qu'il devrait vraiment être mis en œuvre en utilisant une table de search dans la database, mais pour ce que je fais, je ne suis pas en mesure d'append de nouvelles tables à la database.

Je pourrais créer une table temporaire et la remplir à partir du script SQL, ou utiliser

 CASE n WHEN 1 THEN x_1 WHEN 2 THEN x_2 WHEN 3 THEN x_3 ... END 

mais y a-t-il quelque chose de less encombrant?

Malheureusement, non, il ne semble pas être le présent dans votre version.

La fonction CHOOSE -Function est uniquement disponible depuis SQL Server 2012 et fonctionne de la même manière que vous décrivez la fonction Excel.

"mais pour ce que je fais, je ne suis pas en mesure d'append de nouvelles tables à la database" . Eh bien, vous pouvez toujours utiliser la table temporaire, table variable ou, si c'est vraiment une seule chose – table dérivée:

 select ..., lv from <your table> as t left outer join (values (1, x_1), (2, x_2), (3, x_3) ) as l(n, v) on ln = tn 

Bien sûr, vous pouvez toujours essayer de créer votre propre fonction 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) 

mais vous devez garder à l'esprit que les fonctions scalaires ne sont pas vraiment optimisées dans SQL Server.