Usuário com melhor resposta
Consulta tabela com GROUP BY

Pergunta
-
Prezados, boa tarde!
Tenho uma tabela com os campos matricula, nome e aprovado
O campo aprovado pode ter 3 estados:
-Aguardando Aprovação
-Aprovado
-Não AprovadoGostaria de retornar os dados assim:
Matricula - nome - totalAguardandoAprovacao - totalAprovado - totalNaoAprovado
123 - FULANO 2 1 1Alguém teria uma sugestão?
Desde ja agradeço!
Abraços
Respostas
-
-
Lupiva,
Complementando os exemplos apresentados pelo José Diz, veja este outros que podem lhe ajudar em demais necessidades:
-- Pivot em conjunto com View --
Create Table Fornos (Id Int Primary Key, Defeito Varchar(20) Not Null, Forno Varchar(20) Not Null, Equipe Varchar(20) Not Null) Go Insert Into Fornos Values (1,'DEFEITO A','FORNO 3','AZUL'), (2,'DEFEITO A','FORNO 2','VERDE'), (3,'DEFEITO B','FORNO 1','AZUL'), (4,'DEFEITO A','FORNO 1','PRETO'), (5,'DEFEITO B','FORNO 2','VERDE'), (6,'DEFEITO B','FORNO 2','AZUL'), (7,'DEFEITO A','FORNO 1','PRETO'), (8,'DEFEITO A','FORNO 2','AZUL') Go Select * From Fornos Go -- Gerando o Pivot -- Select * from (Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe, CONCAT(Defeito,' - ', Equipe) As 'Defeitos Agrupados Por Equipes', Equipe, Forno As 'Fornos' From Fornos) As F Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt Go -- Adicionando os Totais -- Select * from ( Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe, CONCAT(Defeito,' - ', Equipe) As 'Defeitos Agrupados Por Equipes', Equipe, Forno As 'Fornos' From Fornos ) As F Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt Union All Select 'Totais....', '---->', Sum(Azul) As SomaAzul, Sum(Preto) As SomaPreto, Sum(Verde) As SomaVerde From ( Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe, Equipe From Fornos ) As F Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt Go
-- Este é um exemplo de um Pivot Dinâmico --
-- Criando a Tabela -- CREATE TABLE #T1 (Hora time(0), Carro char(3), Apelido varchar(20)) Go INSERT into #T1 (Hora, Carro, Apelido) Values ('1:00','ABC','Carro 1'), ('1:00','DEF','Carro 2') Go -- Pesquisando os dados -- Declare @Carros varchar(200); Set @Carros= Stuff((SELECT distinct ',' + QuoteName(Convert(varchar,Carro)) from #T1 for XML PATH('')),1,1,''); -- Declarando o Pivot com Query Dinâmica -- Declare @ComandoSQL varchar(1000); Set @ComandoSQL= 'SELECT Hora, ' + @Carros + ' from #T1 ' + 'pivot (max(Apelido) for Carro in (' + @Carros + ')) as T2'; -- Executando a Query Dinâmica -- Exec(@ComandoSQL); -- Excluíndo a tabela -- Drop Table #T1
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta LUPIVA sexta-feira, 5 de julho de 2019 11:15
Todas as Respostas
-
-
-
Lupiva,
Complementando os exemplos apresentados pelo José Diz, veja este outros que podem lhe ajudar em demais necessidades:
-- Pivot em conjunto com View --
Create Table Fornos (Id Int Primary Key, Defeito Varchar(20) Not Null, Forno Varchar(20) Not Null, Equipe Varchar(20) Not Null) Go Insert Into Fornos Values (1,'DEFEITO A','FORNO 3','AZUL'), (2,'DEFEITO A','FORNO 2','VERDE'), (3,'DEFEITO B','FORNO 1','AZUL'), (4,'DEFEITO A','FORNO 1','PRETO'), (5,'DEFEITO B','FORNO 2','VERDE'), (6,'DEFEITO B','FORNO 2','AZUL'), (7,'DEFEITO A','FORNO 1','PRETO'), (8,'DEFEITO A','FORNO 2','AZUL') Go Select * From Fornos Go -- Gerando o Pivot -- Select * from (Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe, CONCAT(Defeito,' - ', Equipe) As 'Defeitos Agrupados Por Equipes', Equipe, Forno As 'Fornos' From Fornos) As F Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt Go -- Adicionando os Totais -- Select * from ( Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe, CONCAT(Defeito,' - ', Equipe) As 'Defeitos Agrupados Por Equipes', Equipe, Forno As 'Fornos' From Fornos ) As F Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt Union All Select 'Totais....', '---->', Sum(Azul) As SomaAzul, Sum(Preto) As SomaPreto, Sum(Verde) As SomaVerde From ( Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe, Equipe From Fornos ) As F Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt Go
-- Este é um exemplo de um Pivot Dinâmico --
-- Criando a Tabela -- CREATE TABLE #T1 (Hora time(0), Carro char(3), Apelido varchar(20)) Go INSERT into #T1 (Hora, Carro, Apelido) Values ('1:00','ABC','Carro 1'), ('1:00','DEF','Carro 2') Go -- Pesquisando os dados -- Declare @Carros varchar(200); Set @Carros= Stuff((SELECT distinct ',' + QuoteName(Convert(varchar,Carro)) from #T1 for XML PATH('')),1,1,''); -- Declarando o Pivot com Query Dinâmica -- Declare @ComandoSQL varchar(1000); Set @ComandoSQL= 'SELECT Hora, ' + @Carros + ' from #T1 ' + 'pivot (max(Apelido) for Carro in (' + @Carros + ')) as T2'; -- Executando a Query Dinâmica -- Exec(@ComandoSQL); -- Excluíndo a tabela -- Drop Table #T1
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta LUPIVA sexta-feira, 5 de julho de 2019 11:15
-
-
Lupiva,
Imagina, estamos sempre a disposição, fico muito feliz, obrigado.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]