Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Existe-t-il une fonction Max dans SQL Server qui prend deux valeurs comme Math.Max ​​dans .NET ?

Si vous utilisez SQL Server 2008 (ou une version ultérieure), voici la meilleure solution :

SELECT o.OrderId,
       (SELECT MAX(Price)
        FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o

Tout le crédit et les votes doivent aller à la réponse de Sven à une question connexe, "SQL MAX de plusieurs colonnes ?"
Je dis que c'est la "meilleure réponse " parce que :

  1. Il n'est pas nécessaire de compliquer votre code avec les instructions UNION, PIVOT, UNPIVOT, UDF et les longues déclarations CASE.
  2. Il n'est pas en proie au problème de la gestion des valeurs nulles, il les gère très bien.
  3. Il est facile de remplacer le "MAX" par "MIN", "AVG" ou "SUM". Vous pouvez utiliser n'importe quelle fonction d'agrégation pour trouver l'agrégat sur plusieurs colonnes différentes.
  4. Vous n'êtes pas limité aux noms que j'ai utilisés (c'est-à-dire "AllPrices" et "Price"). Vous pouvez choisir vos propres noms pour qu'ils soient plus faciles à lire et à comprendre pour le prochain.
  5. Vous pouvez trouver plusieurs agrégats à l'aide des tables dérivées de SQL Server 2008 :
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MaTable(a, b)