Als u SQL Server 2008 (of hoger) gebruikt, dan is dit de betere oplossing:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
Alle credits en stemmen moeten gaan naar Svens antwoord op een gerelateerde vraag, "SQL MAX van meerdere kolommen?"
Ik zeg dat dit het "beste antwoord is" " omdat:
- U hoeft uw code niet ingewikkeld te maken met UNION's, PIVOT's, UNPIVOT's, UDF's en waanzinnig lange CASE-verklaringen.
- Het wordt niet geplaagd door het probleem van het omgaan met nulls, het verwerkt ze prima.
- Het is gemakkelijk om de 'MAX' te verwisselen met 'MIN', 'AVG' of 'SUM'. U kunt elke aggregatiefunctie gebruiken om de aggregatie over veel verschillende kolommen te vinden.
- Je bent niet beperkt tot de namen die ik heb gebruikt (d.w.z. 'AllPrices' en 'Price'). Je kunt je eigen namen kiezen om het voor de volgende persoon gemakkelijker te lezen en te begrijpen.
- U kunt meerdere aggregaten vinden met behulp van afgeleide_tabellen van SQL Server 2008 als volgt:
SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MijnTabel(a, b)