Usuário com melhor resposta
Select com Count e Agrupamento

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?
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
Todas as Respostas
-
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
-
-
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]