Utilizando a função COALESCE no SQL Server 2008

A dica de hoje tem a objetivo de apresentar e demonstrar como podemo utilizar a função COALESCE e qual a sua função.

Através desta função o SQL Server realiza uma análise com base nos valores informados ou passados para os argumentos descritos na função. Desta forma, o COALESCE identifica dentro deste conjunto de argumentos, o primeiro a possuir valores não nulo, fazendo uma análise similar da função ISNULL.

Os argumentos passados para a função COALESCE são reconhecidos e tratados como expressões, validados e consistidos de forma individual.

Normalmente a função COALESCE, deverá retorna o tipo de dados de expressão com a precedência de tipo de dados mais alta. Se todas as expressões forem não anuláveis (nonnullable), o resultado será digitado como nonnullable, ou seja, se todos os argumentos não possuirem valores nulos, o SQL Server vai retornar como valor a mensagem Not Null. Caso contrário todos os argumentos e seus valores sejam considerados e identificados como valores nulos, o SQL Server vai retornar a mensagem de Null.

Podemos também dizer que a função COALESCE, realiza uma análise similar ao comando lógico condicional CASE, fazendo a seguinte verificação:

CASE

   WHEN (expression1 IS NOT NULL) THEN expression1

   WHEN (expression2 IS NOT NULL) THEN expression2

   …

   ELSE expressionN

END

Embora ISNULL e COALESCE sejam equivalentes, podem se comportar de maneira diferente. Uma expressão que envolve ISNULL com parâmetros não nulos é considerada NOT NULL, enquanto as expressões que envolvem COALESCE com parâmetros não nulos são consideradas NULL.

Exemplo: No exemplo a seguir, a tabela wages inclui três colunas que contêm informações sobre o salário anual dos funcionários: valor por hora, salário e comissão. No entanto, um funcionário recebe apenas um tipo de pagamento. Para determinar o valor total pago a todos os funcionários, use a função COALESCE para receber apenas o valor não nulo encontrado em hourly_wage, salary e commission.

   
SET NOCOUNT ON;
GO

IF OBJECT_ID('dbo.wages') IS NOT NULL   
  DROP TABLE wages; 
GO
CREATE TABLE dbo.wages
(
    emp_id        tinyint   identity,
    hourly_wage   decimal   NULL,
    salary        decimal   NULL,
    commission    decimal   NULL,
    num_sales     tinyint   NULL
);
GO

INSERT dbo.wages (hourly_wage, salary, commission, num_sales)
VALUES
    (10.00, NULL, NULL, NULL),
    (20.00, NULL, NULL, NULL),
    (30.00, NULL, NULL, NULL),
    (40.00, NULL, NULL, NULL),
    (NULL, 10000.00, NULL, NULL),
    (NULL, 20000.00, NULL, NULL),
    (NULL, 30000.00, NULL, NULL),
    (NULL, 40000.00, NULL, NULL),
    (NULL, NULL, 15000, 3),
    (NULL, NULL, 25000, 2),
    (NULL, NULL, 20000, 6),
    (NULL, NULL, 14000, 4);
GO

SET NOCOUNT OFF;
GO
SELECT CAST(COALESCE(hourly_wage * 40 * 52,salary,commission * num_sales) AS money) AS 'Total Salary' 
FROM dbo.wages
ORDER BY 'Total Salary';

GO

Itens relacionados: ISNULL  e  CASE.

Espero que você tenha gostado de mais esta dica, simples, prática e que poderá fazer a diferença quando estamos trabalhando com relatórios, listagens de valores, entre outros tipos de situações que necessitamos analisar a consisência dos nossos dados.

Até a próxima.

13 comentários em “Utilizando a função COALESCE no SQL Server 2008

  1. Poxa Cara!

    È só olhar o último select! Ele está com problemas de visibilidade no site. A folha de estilo parece estar cortando o comando. A parte ” AS money) AS ‘Total Salary’ ” está cortada. Só deu para ver porque copiei e colei no bloco de notas.

    Até mais.

    Curtir

Os comentários estão fechados.