Ако използвате SQL Server 2008 (или по-нова версия), това е по-доброто решение:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
Всички заслуги и гласове трябва да отидат за отговора на Свен на свързан въпрос „SQL MAX от множество колони?“
Казвам, че това е „най-добрият отговор " защото:
- Не е необходимо да усложнявате кода си с оператори UNION, PIVOT, UNPIVOT, UDF и безумно дълги CASE.
- Не е измъчван от проблема с обработката на нулеви стойности, а се справя добре с тях.
- Лесно е да замените „MAX“ с „MIN“, „AVG“ или „SUM“. Можете да използвате която и да е агрегатна функция, за да намерите агрегата в много различни колони.
- Не сте ограничени до имената, които използвах (т.е. „AllPrices“ и „Price“). Можете да изберете свои собствени имена, за да улесните четенето и разбирането за следващия човек.
- Можете да намерите множество агрегати, като използвате производните_таблици на SQL Server 2008, както следва:
ИЗБЕРЕТЕ MAX(a), MAX(b) ОТ (СТОЙНОСТИ (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) КАТО MyTable(a, b)