Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Existe uma função Max no SQL Server que aceita dois valores como Math.Max ​​em .NET?


Se você estiver usando o SQL Server 2008 (ou superior), esta é a melhor solução:
SELECT o.OrderId,
       (SELECT MAX(Price)
        FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o

Todos os créditos e votos devem ir para a resposta de Sven a uma pergunta relacionada, "SQL MAX de várias colunas?"
Eu digo que é a "melhor resposta " Porque:
  1. Não é necessário complicar seu código com UNION's, PIVOT's, UNPIVOT's, UDF's e instruções CASE muito longas.
  2. Ele não sofre com o problema de lidar com valores nulos, mas sim com eles.
  3. É fácil trocar "MAX" por "MIN", "AVG" ou "SUM". Você pode usar qualquer função de agregação para encontrar a agregação em muitas colunas diferentes.
  4. Você não está limitado aos nomes que usei (por exemplo, "AllPrices" e "Price"). Você pode escolher seus próprios nomes para facilitar a leitura e a compreensão do próximo.
  5. Você pode encontrar vários agregados usando as tabelas_derivadas do SQL Server 2008 da seguinte forma:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) AS MinhaTabela(a, b)