Hvis du bruger SQL Server 2008 (eller nyere), så er dette den bedre løsning:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
Al kredit og stemmer skal gå til Svens svar på et relateret spørgsmål, "SQL MAX af flere kolonner?"
Jeg siger, det er det "bedste svar " fordi:
- Det kræver ikke, at du komplicerer din kode med UNION's, PIVOT's,UNPIVOT's, UDF'er og vanvittigt lange CASE-udsagn.
- Det er ikke plaget af problemet med at håndtere nuller, det håndterer dem fint.
- Det er nemt at udskifte "MAX" med "MIN", "AVG" eller "SUM". Du kan bruge en hvilken som helst aggregatfunktion til at finde aggregatet over mange forskellige kolonner.
- Du er ikke begrænset til de navne, jeg brugte (dvs. "AllPrices" og "Price"). Du kan vælge dine egne navne for at gøre det nemmere at læse og forstå for den næste fyr.
- Du kan finde flere aggregater ved hjælp af SQL Server 2008's afledte_tabeller som sådan:
SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MyTable(a, b)