2009-08-20 16 views
6

Come implementare il MAX scalare nel server Sql (come Math.Max). (In essenza Voglio realizzare qualcosa di simile a Max (espressione, 0), per rendere i valori negativi sostituiti da 0.)Max. Scalare nel server Sql

che ho visto in altre soluzioni filetti con

  • la creazione di una funzione scalare (come sta che con le prestazioni?)
  • caso in cui l'espressione> 0 THEN ELSE espressione 0) (poi 'espressione' viene valutata due volte?)
  • usi complicate di Max (aggregato).

Qual è il migliore? Perché Sql Server non ha qualcosa di simile a questo integrato? Qualche complicazione che non vedo?

+0

http://stackoverflow.com/questions/989415/t-sql-equivalent-of-excel-max-function-to-return-larger-of-two-numbers –

+0

http://stackoverflow.com/questions/124417/is-there-a-max-function-in-sql-server-that-takes-two-values-like-math-max-in-net – JoeCool

+0

Per ottenere questa funzione nel prodotto, si prega di votare Elemento Microsoft Connect: http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar-max – usr

risposta

1

si desidera creare una funzione scalare definita dall'utente di nome Max in SQL Server di prendere due parametri in input, un'espressione e un valore minimo, e restituire l'espressione se supera il valore minimo, altrimenti restituisce il valore minimo?

Non mi preoccuperei delle prestazioni delle funzioni scalari, lasciare che sia il server a farlo. Userei anche IF invece di CASE per verificare il> valore minimo.

Il server SQL non ha una funzione integrata per te perché non pensavano che sarebbe stato usato abbastanza ampiamente, immagino.

+0

sulle prestazioni delle funzioni scalari: possono essere davvero dolorose , ma penso che sia lecito ritenere che, purché non vi sia alcuna logica di tabella/vista, dovrebbero essere abbastanza veloci (come le funzioni di sistema incorporate?) - Rein 0 secondi fa – Rein

5

In tutti gli altri sistemi principali questa funzione è denominata GREATEST.

SQL Serverseriamente manca.

si può fare un po 'di istruzioni case, o usare qualcosa di simile:

SELECT (
     SELECT MAX(expression) 
     FROM (
       SELECT expression 
       UNION ALL 
       SELECT 0 
       ) q 
     ) AS greatest 
FROM table_that_has_a_field_named_expression 

Quest'ultimo è un po' meno performante rispetto CASE dichiarazioni.

+0

Questo è ottimo perché se la prima espressione è un calcolo complicato e lo stai confrontando con una costante, tu Devo scrivere un calcolo complicato una volta! – John

+1

Per ottenere questa funzionalità nel prodotto, votare sulla voce Microsoft Connect: http://connect.microsoft.com/SQLServer/feedback/details/767183/t-sql-provide-scalar-min-and-scalar- max – usr

+0

Votato!Questo sarebbe sicuramente un'aggiunta utile! – eidylon

0

Query Optimizer dovrebbe impedire che l'espressione venga calcolata più volte.

Per la leggibilità/manutenibilità, considerare l'utilizzo di un CTE per calcolare l'espressione prima dell'istruzione CASE.

Problemi correlati