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