2009-12-28 5 views
2

Je cherchais un bon équivalent à la fonction Oracle LEAST. Je souhaite mettre en œuvre une fonction définie par l'utilisateur qui effectue environ 10 calculs assez complexes et prend la valeur minimale de chacun de ces calculs.SQL Server équivalent à Oracle LEAST?

Ce que je ferais dans Oracle est:

SELECT LEAST 
(
select expression1 from dual, 
select expression2 from dual, 
select expression3 from dual 
) from dual 

Voir http://www.techonthenet.com/oracle/functions/least.php pour plus sur Oracle MOINS.

Si expression1 est retourné 10, EXPRESSION2 retour 5 et expression3 reeturned 30, toute l'expression retournerait 5.

Parce que cela peut être 10-20 calculs, le cas où la syntaxe va obtenir difficile à manier rapidement.

Bien que le code sera plus lisible si nous le décomposons plus, j'ai pensé qu'il serait plus efficace de le faire dans une requête de base de données. Faites-moi savoir que je suis incorrect sur ce point, s'il vous plaît! Par exemple, une procédure stockée avec 20 requêtes simples est significativement plus lente qu'une procédure stockée avec une requête qui fait référence à un grand nombre de tables dans une seule requête.

+2

Peut être intéressant de regarder http://dba.stackexchange.com/questions/21542/what-is-the-most-efficient-way-to-get-the-minimum-of-multiple-columns-on- sql-ser - il gère le plus GRANDS vs MOINS mais les concepts devraient être équivalents. –

+0

Jetez un oeil à plusieurs solutions ici: http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-takes-two-values-like-math-max -in-ne – Vadzim

Répondre

5

mayby ​​cette requête pourrait aider à:

SELECT min(c1) 
from ( 
     select expression1 as c1 
     union all 
     select expression2 as c1 
     union all 
     select expression3 as c1 
) 
+0

Merci, c'est très utile! – Jade

+0

Une table dérivée (à partir d'un constructeur de valeur de table) peut accomplir quelque chose de très similaire. La sémantique est presque la même que l'exemple ci-dessus - la principale différence dans la syntaxe, qui peut être plus ou moins compacte selon le contexte. Il y a un bon exemple [ici] (https://msdn.microsoft.com/en-us/library/dd776382.aspx#Anchor_5), sous les ajouts de la communauté. – unbob

-1

La fonction moins() est appliquée horizontalement dans Oracle (au niveau de la ligne), tandis que Min() est appliquée verticalement sur une colonne. L'exemple de la question nécessite Min().

+0

Merci pour la réponse, mais une réponse correcte, détaillée et acceptée a été donnée il y a 7 ans ... – AnoE

Questions connexes