Jeśli używasz SQL Server 2008 (lub nowszego), to jest to lepsze rozwiązanie:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
Wszystkie zasługi i głosy powinny iść na odpowiedź Svena na powiązane pytanie „SQL MAX wielu kolumn?”
Powiadam, że to „najlepsza odpowiedź " ponieważ:
- Nie wymaga to komplikowania kodu za pomocą instrukcji UNION, PIVOT, UNPIVOT, UDF i szalenie długich instrukcji CASE.
- Nie nęka go problem obsługi wartości null, radzi sobie z nimi dobrze.
- Łatwo jest zamienić „MAX” na „MIN”, „AVG” lub „SUM”. Możesz użyć dowolnej funkcji agregującej, aby znaleźć agregację w wielu różnych kolumnach.
- Nie jesteś ograniczony do nazw, których użyłem (np. „AllPrices” i „Price”). Możesz wybrać własne imiona, aby ułatwić czytanie i zrozumienie dla następnego faceta.
- Można znaleźć wiele agregatów za pomocą tabel pochodnych SQL Server 2008, takich jak:
SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MojaTabela(a, b)