sql >> Databáze >  >> RDS >> Sqlserver

Existuje v SQL Server funkce Max, která nabývá dvou hodnot jako Math.Max ​​v .NET?

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:

  1. Nevyžaduje to komplikování kódu pomocí příkazů UNION, PIVOT, UNPIVOT, UDF a šíleně dlouhých příkazů CASE.
  2. Netrápí ji problém se zpracováním nulových hodnot, zvládá je v pohodě.
  3. 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.
  4. 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.
  5. 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)


  1. Jak vytvořit hierarchický rekurzivní dotaz MySQL?

  2. Uložená procedura MySQL s parametry

  3. Typ data bez času v Oracle

  4. Závažná chyba PHP:Třída 'PDO' nebyla nalezena