Opção WITH ROLLUP

Ontem um amigo meu, @felipe_cucick me perguntou sobre subtotais para um relatorio.
Pois bem, disse a ele sobre o recurso Rollup do SQL Server, e como prometido, este post contem a explicação:

1. Criei basicamente o mesmo cenario que foi passado por ele porem com uma massa de dados ficticia.

--CRIAÇÃO DE TABELA
CREATE TABLE Pacientes_Exames
(
Clinica VARCHAR(1000),
Paciente VARCHAR(1000),
Exame VARCHAR(1000),
ValorPago DECIMAL(9,2)
)

--CARGA DE DADOS
INSERT INTO Pacientes_Exames VALUES
('Clinica 01','Paciente 01','Exame 01', 50.50),
('Clinica 01','Paciente 02','Exame 01', 50.50),
('Clinica 01','Paciente 03','Exame 03', 79.90),
('Clinica 01','Paciente 04','Exame 04', 205.00),
('Clinica 02','Paciente 05','Exame 05', 1000.00),
('Clinica 02','Paciente 06','Exame 01', 50.50),
('Clinica 02','Paciente 07','Exame 07', 150.00),
('Clinica 03','Paciente 08','Exame 08', 155.40),
('Clinica 03','Paciente 09','Exame 03', 79.90),
('Clinica 03','Paciente 10','Exame 10', 60.00)

--SELECT COM ROLLUP
SELECT a.Clinica, a.Exame, SUM(a.ValorPago)
FROM Pacientes_Exames a
GROUP BY a.Clinica, a.Exame WITH ROLLUP

Explicação:

O que é o recurso WITH ROLLUP: Este recurso é uma opção da clausula GROUP BY de qualquer select, com ele é possivel a automatização de subgrupos, como este recurso não é muito novo, ele possui suas limitações, por exemplo:
– Trabalhas apenas com o subgrupo do primeiro campo especificado do select.
Para resolver isso, em versões posteriores foi introduzido o WITH CUBE e o GROUPING SETTINGS.

Como funciona: Não que va dar erro, mas para sua utilização consistente, é necessario uma função de agregação, então, o SQL Server ira realizar essa função de agregação para o primeiro campo especificado no select.
É basicamente um select dentro do outro, porem eles vem no mesmo ResultSet, o que é muito bom para programadores.
Para se encontrar o resultado gerado pelo WITH ROLLUP, basta encontrar a coluna cuja qual não seja nem a primeira nem a ultima com o valor NULL.

Anúncios
Post a comment or leave a trackback: Trackback URL.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: