none
Select com Count e Agrupamento RRS feed

  • Pergunta

  • Boa Noite Pessoal, estou com a seguinte duvida aqui:

    Tenho uma tabela em um banco sql, no formato do seguinte exemplo:

    ID DEFEITO FORNO EQUIPE
    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

    Preciso selecionar os dados e exibir em um grid no seguinte formato:

    DEFEITO FORNO 1 FORNO 2 FORNO 3 TOTAL
    EQUIPE AZUL        
    DEFEITO A   1 1 2
    DEFEITO B 1 1   2
    EQUIPE VERDE        
    DEFEITO A   1   1
    DEFEITO B   1   1
    EQUIPE PRETO        
    DEFEITO A 2     2
    DEFEITO B       0

    Já estou fazendo a contagem e o agrupamento por forno com o seguinte código:

    select defeito, count(case when forno = 'FORNO 1' then 1 end) as FORNO1, count(case when forno = 'FORNO 2' then 1 end) as FORNO2, count(case when forno = 'FORNO 3' then 1 end) as FORNO3, count(1) as Total from analise_forno group by defeito

    Consigo fazer o agrupamento por equipe direto no Select para formar a exibição acima?

    quinta-feira, 7 de março de 2019 01:12

Respostas

  • Deleted
    • Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 7 de março de 2019 11:45
    • Marcado como Resposta lpalini quinta-feira, 7 de março de 2019 23:38
    quinta-feira, 7 de março de 2019 09:56
  • Há como agrupar por equipe e por defeito, mas para exibir como quer é necessário realizar algumas transformações não usuais. Geralmente esse tipo de formatação é realizado no programa de exibição.

    Eis o código para acumular por equipe/defeito:

    -- código #1
    SELECT Equipe, Defeito, 
           sum (case when FORNO = 1 then 1 end) as [Forno 1],
           sum (case when FORNO = 2 then 1 end) as [Forno 2],
           sum (case when FORNO = 3 then 1 end) as [Forno 3],
           count (FORNO) as Total
      from analise_forno 
    group by Equipe, Defeito;


    José Diz     Belo Horizonte, MG - Brasil     [Linked In]   [e-mail]   [Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    José,

    Concordo com você, ainda mais por justamente as colunas Equipe e Defeito serem distintas, neste caso, como o Ipalini deseja condicionar os valores em uma só.


    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 lpalini quinta-feira, 7 de março de 2019 23:38
    quinta-feira, 7 de março de 2019 11:49

Todas as Respostas

  • Deleted
    • Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 7 de março de 2019 11:45
    • Marcado como Resposta lpalini quinta-feira, 7 de março de 2019 23:38
    quinta-feira, 7 de março de 2019 09:56
  • Há como agrupar por equipe e por defeito, mas para exibir como quer é necessário realizar algumas transformações não usuais. Geralmente esse tipo de formatação é realizado no programa de exibição.

    Eis o código para acumular por equipe/defeito:

    -- código #1
    SELECT Equipe, Defeito, 
           sum (case when FORNO = 1 then 1 end) as [Forno 1],
           sum (case when FORNO = 2 then 1 end) as [Forno 2],
           sum (case when FORNO = 3 then 1 end) as [Forno 3],
           count (FORNO) as Total
      from analise_forno 
    group by Equipe, Defeito;


    José Diz     Belo Horizonte, MG - Brasil     [Linked In]   [e-mail]   [Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    José,

    Concordo com você, ainda mais por justamente as colunas Equipe e Defeito serem distintas, neste caso, como o Ipalini deseja condicionar os valores em uma só.


    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 lpalini quinta-feira, 7 de março de 2019 23:38
    quinta-feira, 7 de março de 2019 11:49
  • Ajudou bastante pessoal, Obrigado pela ajuda.
    quinta-feira, 7 de março de 2019 23:38
  • Ipalini,

    Depois de entender melhor a sua necessida, veja se o uso do comando Pivot pode ser útil:

    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
    
    Select * from 
    (Select CONCAT(Defeito,' - ', Equipe) As DefeitosPorEquipe,
                CONCAT(Defeito,' - ', Equipe) As 'Defeitos Agrupados Por Equipes',
    			Equipe,
    			Forno
     From Fornos) As F
    Pivot (Count(DefeitosPorEquipe) For Equipe In ([Azul],[Preto],[Verde])) as Pvt
    Go

    Ou se preferir pode também adicionar 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


    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, 8 de março de 2019 12:52