Om du använder SQL Server 2008 (eller senare) är detta den bättre lösningen:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
All kredit och röster ska gå till Svens svar på en relaterad fråga, "SQL MAX av flera kolumner?"
Jag säger att det är det "bästa svaret " eftersom:
- Det kräver inte att du komplicerar din kod med UNION:s, PIVOT:s,UNPIVOT:s, UDF:s och galet långa CASE-uttalanden.
- Den plågas inte av problemet med att hantera nollor, den hanterar dem bra.
- Det är lätt att byta ut "MAX" mot "MIN", "AVG" eller "SUMMA". Du kan använda vilken aggregatfunktion som helst för att hitta aggregatet över många olika kolumner.
- Du är inte begränsad till namnen jag använde (dvs. "Alla priser" och "Pris"). Du kan välja dina egna namn för att göra det lättare att läsa och förstå för nästa kille.
- Du kan hitta flera aggregat med hjälp av SQL Server 2008:s härledda_tabeller så här:
VÄLJ MAX(a), MAX(b) FROM (VÄRDEN (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MyTable(a, b)