Ir para conteúdo
Fórum Script Brasil

Victor Noda

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Victor Noda

Victor Noda's Achievements

0

Reputação

  1. Boa noite, pessoal! Imaginemos que exista uma tabela Teste com os seguintes dados: Mes Nome_Regional Nome_Convenio Qtde_Atendimentos ---- ------------- ------------- -------------------- fev Leste Banco 300.0 fev Norte Escola 60.0 fev Sul Escola 480.0 fev Sul Hospital 80.0 jan Leste Banco 560.0 jan Sul Escola 350.0 mar Norte Escola 80.0 mar Sul Escola 370.0 mar Sul Hospital 120.0 Há meses em que podem ter novas regiões ou convênios, da mesma forma que podem ser excluídos ou estar em branco em um outro mês. Como faço uma consulta para ter resultado com estrutura semelhante a abaixo? Nome_Regional Nome_Convenio Total_Jan Total_Fev Total_Mar ------------- ------------- ---------- ---------- ---------- Leste Banco 560.0 300.0 NULL Norte Escola NULL 60.0 NULL Norte Escola NULL NULL 80.0 Sul Escola 350.0 480.0 370.0 Sul Hospital NULL 80.0 NULL Sul Hospital NULL NULL 120.0 Eu até criei uma consulta funcional mas ela tá muito pesada! (na vida real, tenho que trabalhar com uma tabela com estrutura parecida, com quase 2.000.000 de registros e a consulta tem que verificar 6 meses) Segue script para criar e alimentar a tabela Teste, além do select louco que utilizei. -- criação da tabela Teste CREATE TABLE Teste (Mes Varchar(3), Nome_Regional Varchar(10), Nome_Convenio Varchar(10), Qtde_Atendimentos Float) -- inclusão de dados em Teste INSERT INTO Teste SELECT 'jan' AS Mes, 'Sul' AS Nome_Regional, 'Escola' AS Nome_Convenio, '350' AS Qtde_Atendimentos UNION SELECT 'fev' AS Mes, 'Sul' AS Nome_Regional, 'Escola' AS Nome_Convenio, '480' AS Qtde_Atendimentos UNION SELECT 'mar' AS Mes, 'Sul' AS Nome_Regional, 'Escola' AS Nome_Convenio, '370' AS Qtde_Atendimentos UNION SELECT 'fev' AS Mes, 'Sul' AS Nome_Regional, 'Hospital' AS Nome_Convenio, '80' AS Qtde_Atendimentos UNION SELECT 'mar' AS Mes, 'Sul' AS Nome_Regional, 'Hospital' AS Nome_Convenio, '120' AS Qtde_Atendimentos UNION SELECT 'fev' AS Mes, 'Norte' AS Nome_Regional, 'Escola' AS Nome_Convenio, '60' AS Qtde_Atendimentos UNION SELECT 'mar' AS Mes, 'Norte' AS Nome_Regional, 'Escola' AS Nome_Convenio, '80' AS Qtde_Atendimentos UNION SELECT 'jan' AS Mes, 'Leste' AS Nome_Regional, 'Banco' AS Nome_Convenio, '560' AS Qtde_Atendimentos UNION SELECT 'fev' AS Mes, 'Leste' AS Nome_Regional, 'Banco' AS Nome_Convenio, '300' AS Qtde_Atendimentos -- select LOUCO funcional mas não otimizado SELECT Nome_Regional = (CASE WHEN A.Nome_Regional IS NOT NULL THEN A.Nome_Regional WHEN B.Nome_Regional IS NOT NULL THEN B.Nome_Regional ELSE C.Nome_Regional END), Nome_Convenio = (CASE WHEN A.Nome_Convenio IS NOT NULL THEN A.Nome_Convenio WHEN B.Nome_Convenio IS NOT NULL THEN B.Nome_Convenio ELSE C.Nome_Convenio END), A.Qtde_Atendimentos AS Qtde_Jan, B.Qtde_Atendimentos AS Qtde_Fev, C.Qtde_Atendimentos AS Qtde_Mar FROM ( SELECT Nome_Regional, Nome_Convenio, Qtde_Atendimentos FROM Teste WHERE Mes = 'jan' ) A FULL JOIN ( SELECT Nome_Regional, Nome_Convenio, Qtde_Atendimentos FROM Teste WHERE Mes = 'fev' ) B ON A.Nome_Regional = B.Nome_Regional AND A.Nome_Convenio = B.Nome_Convenio FULL JOIN ( SELECT Nome_Regional, Nome_Convenio, Qtde_Atendimentos FROM Teste WHERE Mes = 'mar' ) C ON C.Nome_Regional = A.Nome_Regional AND C.Nome_Regional = B.Nome_Regional AND C.Nome_Convenio = A.Nome_Convenio AND C.Nome_Convenio = B.Nome_Convenio ORDER BY Nome_Regional, Nome_Convenio Desde já agradeço pela atenção! Obrigado!
×
×
  • Criar Novo...