Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy istnieje funkcja Max w SQL Server, która przyjmuje dwie wartości, takie jak Math.Max ​​w .NET?

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ż:

  1. Nie wymaga to komplikowania kodu za pomocą instrukcji UNION, PIVOT, UNPIVOT, UDF i szalenie długich instrukcji CASE.
  2. Nie nęka go problem obsługi wartości null, radzi sobie z nimi dobrze.
  3. Ł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.
  4. 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.
  5. 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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Error 111:„… musi być pierwszą instrukcją w partii kwerendy”

  2. Test wydajności MS SQL Server w systemie Linux i Windows w celu wykrycia różnicy

  3. Ostatnio wykonane zapytania dla określonej bazy danych

  4. Przykłady SIN() w SQL Server

  5. Korzystanie z alertów i operatorów w SQL Server