sql >> Base de Datos >  >> RDS >> Sqlserver

¿Existe una función Max en SQL Server que tome dos valores como Math.Max ​​en .NET?

Si está utilizando SQL Server 2008 (o superior), esta es la mejor solución:

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

Todo el crédito y los votos deben ir a la respuesta de Sven a una pregunta relacionada, "¿SQL MAX de múltiples columnas?"
Digo que es la "mejor respuesta " porque:

  1. No requiere complicar su código con sentencias CASE de UNION, PIVOT, UNPIVOT, UDF y larguísimas.
  2. No está plagado del problema de manejar nulos, los maneja muy bien.
  3. Es fácil intercambiar "MAX" con "MIN", "AVG" o "SUM". Puede usar cualquier función de agregado para encontrar el agregado en muchas columnas diferentes.
  4. No está limitado a los nombres que usé (es decir, "Todos los precios" y "Precio"). Puede elegir sus propios nombres para que sea más fácil de leer y entender para el siguiente chico.
  5. Puede encontrar múltiples agregados utilizando tablas derivadas de SQL Server 2008 de la siguiente manera:
    SELECCIONE MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) COMO MiTabla(a, b)