Pokud používáte SQL Server 2008 (nebo vyšší), pak je toto lepší řešení:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
Všechny zásluhy a hlasy by měly patřit Svenově odpovědi na související otázku „SQL MAX více sloupců?“
Říkám, že je to „nejlepší odpověď protože:
- Nevyžaduje to komplikování kódu pomocí příkazů UNION, PIVOT, UNPIVOT, UDF a šíleně dlouhých příkazů CASE.
- Netrápí ji problém se zpracováním nulových hodnot, zvládá je v pohodě.
- Je snadné zaměnit „MAX“ za „MIN“, „AVG“ nebo „SUM“. K nalezení agregace v mnoha různých sloupcích můžete použít jakoukoli agregační funkci.
- Nejste omezeni pouze na názvy, které jsem použil (tj. „AllPrices“ a „Price“). Můžete si vybrat svá vlastní jména, aby se daly snáze číst a rozumět dalšímu klukovi.
- Můžete najít několik agregací pomocí odvozených_tabulek SQL Server 2008 takto:
SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) JAKO MyTable(a, b)