segunda-feira, 26 de abril de 2010

Novidades T-SQL no SQL Server 2008 - Parte 3

Versão do SQL Server: 2008.

No dois últimos post escrevi sobre duas novidades relacionadas ao uso de variáveis e sobre o comando INSERT, veja nos links abaixo:

Neste terceiro post da série sobre as novidades do T-SQL no SQL Server 2008 veremos GROUPING SET. Até o SQL Server 2005 existiam 3 possibilidades de gerar subtotais em uma consulta, utilizando CUBE, ROLLUP e UNION, como vemos abaixo:

-- SQL 2005 ou inferior
select Cliente, NULL as Ano, sum(Valor) as Valor
from tmpCliente group by Cliente
UNION ALL
select NULL as Cliente, Ano, sum(Valor)
from tmpCliente group by Ano
UNION ALL
select NULL as Cliente, NULL as Ano, sum(Valor)
from tmpCliente
order by 1,2



Como resultado temos uma única consulta contendo:
Em Vermelho – total geral
Em Verde – subtotal por ano
Em azul – subtotal por cliente

No SQL Server 2008, para produzir o mesmo resultado, a consulta fica muito mais simples com GROUPING SET, veja:

select Cliente, Ano, sum(Valor)
from tmpCliente
group by grouping sets((Cliente),(Ano),())
order by 1,2


Até o próximo post,
Landry

Nenhum comentário: