Diferenças entre COMPUTE e GROUP BY e Clásula CASE - Compute By e Case: SQL Server 2008 - Parte 2

Neste artigo veremos as diferenças entre as cláusulas COMPUTE e GROUP BY. Veremos também conceitos e exemplos com a cláusula CASE.

Voltando de onde paramos, tanto para COMPUTE quanto para COMPUTE BY são obtidos dois grupos de resultado para o SELECT, como vemos na tabela abaixo:
 

Grupos de resultado com COMPUTE

Grupos de resultados com COMPUTE BY

Primeiro Resultado: Possui todas as linhas de detalhe com a informação de lista de seleção.

Primeiro Resultado: Possui o grupo de linhas de detalhe com a informação de lista de seleção de cada grupo.

Segundo Resultado: Possui uma linha com os totais das funções agregadas definidas na cláusula COMPUTE.

Segundo Resultado: Possui uma linha com os subtotais das funções agregadas definidas no grupo pela cláusula COMPUTE.

 As diferenças entre COMPUTE e GROUP BY – Na tabela abaixo vemos as principais diferenças entre as cláusulas COMPUTE e GROUP BY:

Características

COMPUTE

GROUP BY

Quantidade de grupos de resultado

Diversos grupos de resultado são produzidos.

Apenas um grupo de resultado é produzido.

Lista de seleção

A lista de seleção pode ter expressões que não sejam funções agregadas e colunas de agrupamento. As funções agregadas não são especificadas na lista de seleção, mas sim na cláusula COMPUTE.

A lista de seleção pode possuir apenas as funções agregadas e colunas de agrupamento.

 Cláusula CASE – Os valores pertencentes a uma coluna podem ser testados por meio da cláusula CASE em conjunto com o comando SELECT. Para exemplificar o uso dessa cláusula, usaremos a tabela Clientes apresentada abaixo:

 Vamos alterar as colunas SexoCliente e Status, de M e F para Masculino e Feminino e, de A e I para Ativo e Inativo. Para que isso aconteça use a seguinte instrução:

SELECT Nome, CASE SexoCliente WHEN 'M' THEN 'Masculino' ELSE 'Feminino' END AS SexoCliente, CASE Status WHEN 'A' THEN 'Ativo' ELSE 'Inativo' END AS Status FROM Clientes

 Veja o resultado:

 
 Agora vamos usar como exemplo a tabela de Produtos:
 
 

 Vamos usar a cláusula CASE para exibir Menor que 1000 para os produtos com valor unitário inferior a 1000.00, e Maior que 1000 para o oposto. Veja como fazer isso:

SELECT Nome, Fabricante, Quantidade, VlUnitario, CASE WHEN VlUnitario < 1000.00 THEN 'Menor que 1000' ELSE 'Maior que 1000' END AS VlUnitario, Tipo FROM Produtos

 E o resultado é o seguinte:

 Note que retornei duas vezes a coluna VlUnitario, para demonstrar seu valor normal e seu valor com o uso da cláusula CASE aplicada.

 Fonte de Consulta: Apostila de SQL Server, da Impacta Tecnologia.

 Assim finalizo o artigo. Muito obrigado a todos!

 Um abraço, e até o próximo artigo.

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com

Artigos relacionados