Nesse artigo vamos elaborar relatórios gerenciais por período, utilizando função de agregação, instrução DML, funções de cadeias de caracteres, funções de conversão e funções de data.
Essa é uma rotina comum no dia-a-dia de um DBA e existem diversas soluções para esse caso.
A gerência solicitou uma listagem com as seguintes informações:
– Total de processos cadastrados por mês/ano;
Vamos lá!
Vou usar a tabela de usuários(tb_Usuario) que foi criada em um de meus artigos anteriores.
E a tabela de processo tem a seguinte estrutura…
If Object_id ('tb_Processo')is not Null Drop Table tb_Processo Go Create Table tb_Processo ( id_Processo int identity(1,1) Not null, nu_Processo varchar(30), id_Usuario_Cadastro int, dt_Cadastro datetime ) Go Insert tb_Processo (nu_Processo,id_Usuario_Cadastro,dt_Cadastro) Values('00055700-15.2015.100.0002',1,'20151105'), ('00000300-15.2015.100.0002',1,'20151112'), ('00012800-15.2015.100.0232',1,'20151201'), ('00000100-15.2016.100.0000',2,'20160111'), ('00004400-15.2016.100.0000',2,'20160211'), ('00001100-15.2016.100.0002',3,'20160211'), ('00004200-15.2016.100.0011',3,'20160213') Select * From tb_Processo
Agora vamos a solução!
Total de processos cadastrados por período:
Select convert(varchar(4),year(dt_Cadastro)) + '-' + replicate('0',2 - len(convert(varchar(2),month(dt_Cadastro)))) + convert(varchar(2),month(dt_Cadastro)) as PERIODO, count(*) as TOTAL From tb_Processo Group by convert(varchar(4),year(dt_Cadastro)) + '-' + replicate('0',2 - len(convert(varchar(2),month(dt_Cadastro)))) + convert(varchar(2),month(dt_Cadastro))
Em seguida foi solicitado que adicionasse um agrupamento por usuário de cadastro…
Para pegar o nome do usuário, fiz um JOIN com a tabela de usuários (tb_Usuario) e adicionei a coluna nm_Usuario a cláusula GROUP BY.
Select convert(varchar(4),year(a.dt_Cadastro)) + '-' + replicate('0',2 - len(convert(varchar(2),month(a.dt_Cadastro)))) + convert(varchar(2),month(a.dt_Cadastro)) as PERIODO, b.nm_Usuario as USUARIO, count(*) as TOTAL From tb_Processo a Inner Join tb_Usuario b On a.id_Usuario_Cadastro = b.id_Usuario Group by convert(varchar(4),year(a.dt_Cadastro)) + '-' + replicate('0',2 - len(convert(varchar(2),month(a.dt_Cadastro)))) + convert(varchar(2),month(a.dt_Cadastro)), b.nm_Usuario
Bom, é isso!
Se você tem alguma outra boa solução para esse caso e quiser compartilhar, fique a vontade e comente no artigo.
Gostou deste artigo? Então você vai gostar do treinamento Guia DBA que vai tornar você um especialista em otimização, clique aqui e adquira o “Curso SQL Server 2014” e receba também “O passo a passo para otimização”.