Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Esiste una funzione Max in SQL Server che accetta due valori come Math.Max ​​in .NET?

Se stai utilizzando SQL Server 2008 (o versioni successive), questa è la soluzione migliore:

SELECT o.OrderId,
       (SELECT MAX(Price)
        FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o

Tutti i crediti e i voti dovrebbero andare alla risposta di Sven a una domanda correlata, "SQL MAX di più colonne?"
Dico che è la "risposta migliore " perché:

  1. Non è necessario complicare il tuo codice con UNION, PIVOT, UNPIVOT, UDF e dichiarazioni CASE pazzesche.
  2. Non è afflitto dal problema della gestione dei null, li gestisce bene.
  3. È facile sostituire "MAX" con "MIN", "AVG" o "SUM". Puoi utilizzare qualsiasi funzione di aggregazione per trovare l'aggregato su molte colonne diverse.
  4. Non sei limitato ai nomi che ho usato (ad esempio "AllPrices" e "Price"). Puoi scegliere i tuoi nomi per rendere più facile la lettura e la comprensione per il prossimo ragazzo.
  5. Puoi trovare più aggregati utilizzando le tabelle_derivate di SQL Server 2008 in questo modo:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MyTable(a, b)