O dataholic Abraão Vasconcelos compartilhou com a gente seu conhecimento sobre o operador CUBE. Bora conferir??
Você já ouviu falar do operador CUBE no SQL Server? Para entender o que esse operador faz, vamos começar criando um sistema bastante simples de locação de carros.
create table carro ( car_cod int not null primary key identity(1,1), car_marca varchar(50) not null, car_modelo varchar(50) not null ) insert into carro values (‘Toyota’, ‘Modelo 1’), (‘BMW’, ‘Modelo 3’), (‘Mercedes-Benz’, ‘Modelo 2’)
create table cliente( cli_id int not null primary key identity(1,1), cli_nome varchar(1000) not null ) insert into cliente values (‘Cliente A’), (‘Cliente B’), (‘Cliente C’),(‘Cliente D’), (‘Cliente E’), (‘Cliente F’), (‘Cliente G’)
create table locacao( loc_cod int not null primary key identity(1,1), loc_car_cod int not null references carro(car_cod), loc_cli_cod int not null references cliente(cli_id), loc_dt date not null )
insert into locacao values
(1, 3,’2019-04-21′),(2, 3, ‘2019-05-31’),(3, 1, ‘2015-03-25’), (2, 4, ‘2016-04-15’),(3, 5, ‘2013-02-09’),(1, 2, ‘2014-12-04’),(3, 2, ‘2014-07-01’), (3, 2, ‘2019-07-11′), (3,4,’2019-01-10′), (1,3,’2014-06-14′), (1,3,’2014-09-08′), (3,4,’2015-02-18′), (3,1,’2015-12-17′),(1,3,’2013-11-15’)
Agora imagine que nós precisamos montar um relatório capaz de agrupar todos os nossos dados por ANO e Marca. O objetivo deste relatório é trazer o número total de vezes que os carros de uma determinada Marca foram alugados em cada ano. Neste momento não nos interessa saber o modelo do carro.
Conseguimos montar este relatório utilizando a cláusula GROUP BY. Agora imagine que precisamos exibir em nosso relatório o número total de locações para cada marca, esta nova informação considera todos os anos. E para deixar o nosso relatório mais completo, mostraremos o total de locações por ano, ou seja, não importa a marca, queremos saber o total em cada ano.
Vamos resolver este problema pegando a consulta anterior e colocando as colunas do group by dentro do operador cube. Também vamos comentar a cláusula order by.
Veja que as linhas com os valores que representam os totais mostram NULL para Ano e Marca. Vamos tratar estas duas colunas usando expressões CASE.
E agora conseguimos ver o nosso relatório completo com a ajuda do CUBE! Não esqueça de digitar todos estes códigos no seu ambiente de testes!
Gostou desse conteúdo? Deixe seu comentário para gente saber e compartilhar mais conteúdos com esse tema 😊