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é:
- Non è necessario complicare il tuo codice con UNION, PIVOT, UNPIVOT, UDF e dichiarazioni CASE pazzesche.
- Non è afflitto dal problema della gestione dei null, li gestisce bene.
- È facile sostituire "MAX" con "MIN", "AVG" o "SUM". Puoi utilizzare qualsiasi funzione di aggregazione per trovare l'aggregato su molte colonne diverse.
- 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.
- 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)