none
Consulta tabela com GROUP BY RRS feed

  • 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 Aprovado

    Gostaria de retornar os dados assim:

    Matricula  -   nome  -   totalAguardandoAprovacao  -  totalAprovado  -  totalNaoAprovado 
     123         -   FULANO                 2                                   1                            1

    Alguém teria uma sugestão?

    Desde ja agradeço!
    Abraços

    quinta-feira, 4 de julho de 2019 17:32

Respostas

  • Deleted
    • Marcado como Resposta LUPIVA quinta-feira, 4 de julho de 2019 18:00
    quinta-feira, 4 de julho de 2019 17:41
  • 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
    quinta-feira, 4 de julho de 2019 20:18

Todas as Respostas

  • Deleted
    • Marcado como Resposta LUPIVA quinta-feira, 4 de julho de 2019 18:00
    quinta-feira, 4 de julho de 2019 17:41
  • Prezado Jose Diz,

    Foi perfeito..Funcionou 100%.

    Muito Obrigado pela dica!
    Não tinha muito conhecimento de usar PIVOT.

    Grande abraço e mais uma vez obrigado.

    quinta-feira, 4 de julho de 2019 17:59
  • 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
    quinta-feira, 4 de julho de 2019 20:18
  • Ola Junior, bom dia!

    Muito obrigado pela dica.
    Foi exemplo muito pratico e didático!

    Consegui resolver um outro problema com esse seu código!

    Mais uma vez, obrigado!

    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]

    sexta-feira, 5 de julho de 2019 14:36