Usuário com melhor resposta
SubConsulta

Pergunta
-
Boa tarde!
Estou precisando montar uma consulta onde liste o nome do grupo , a quantidade total de cada grupo e a quantidade total que seria a soma de todos os grupo. Seria basicamente assim:
Grupo | quantidade do grupo | total Geral
A10 | 3 | 100
A30 |50 |100
A40 | 70 |100
A89 | 5 | 100
Minha dificuldade esta sendo em colocar o total geral em uma coluna. Estou tentando com uma subconsulta porém nao está funcionando. Quando incluo a subconsulta fica dando a mensagem que preciso incluir campos no group by
Poderiam me ajuda?
SELECT GRUPO, COUNT(*) AS TOTAL_GRUPO, (SELECT COUNT(*) FROM vw_frota_media_ch_v X WHERE X.CH_ID = V.CH_ID ) AS TOTAL_GERAL FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO
Ou teria outra forma de montar essa consulta?
Respostas
-
Boa tarde,
Carine, experimente fazer uns testes dessa forma:
SELECT GRUPO, COUNT(*) AS TOTAL_GRUPO, SUM(COUNT(*)) OVER() AS TOTAL_GERAL FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta carine.couto quarta-feira, 5 de julho de 2017 19:28
-
Essa query te atende ??
SELECT GRUPO , Mes = MONTH(CH_DATA_ABERTURA), QuantidadeGrupo = COUNT() OVER( PARTITION BY GRUPO), TotalGeral = COUNT() OVER() FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO,Mes;
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves
- Marcado como Resposta carine.couto quarta-feira, 5 de julho de 2017 19:28
Todas as Respostas
-
Carine,
O Total Geral seria a soma entre Total_Grupo + Total_Geral?
Será que este exemplo pode te ajudar?
Create Table Teste (Codigo Char(3), Quantidade Int, Total Int) Go Insert Into Teste Values ('A10', 3, 100), ('A30', 50, 100), ('A40', 70, 100), ('A89', 5, 100) Go Insert Into Teste Values ('A10', 3, 100), ('A30', 50, 100), ('A40', 70, 100), ('A89', 5, 100) Go Insert Into Teste Values ('A10', 6, 120), ('A30', 5, 130), ('A40', 7, 150), ('A89', 15, 180) Go -- Utilizando SubQuery -- Select Codigo, Count(Quantidade) as Quantidade, Total, Total_Geral = (Count(Quantidade) + Sum(Total)) From Teste Group By Codigo, Total Go
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP quarta-feira, 5 de julho de 2017 18:43
-
O total geral seria a soma dos grupos.
O usuário vai digitar o período e a consulta trará a quantidade de cada grupo e total geral a soma dos grupos.
Acho que esse exemplo ta melhor.
Grupo | quantidade do grupo | total Geral
A10 | 3 | 108
A30 |30 |108
A40 | 70 |108
A89 | 5 | 108
Se somarmos os valores 3 + 30 +70+5 = 108
esse seria o total geral.
-
Analise o uso da função OVER()
segue um exemplo
DECLARE @Grupos TABLE ( nome CHAR(3) , quantidade INT ) INSERT INTO @Grupos ( nome, quantidade ) VALUES ( 'A10',3 ), ( 'A30',50 ), ( 'A40',70 ), ( 'A89',5 ), ( 'A10',3 ) SELECT G.nome , G.quantidade, QuantidadeGrupos = COUNT(*) OVER(), TotalGrupos = sum(G.quantidade) OVER() FROM @Grupos AS G
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves
-
Carine,
Mas neste caso, seria justamente uma simples SubQuery fazendo o Sum de toda coluna?
Será que isso ajudaria:
Select Codigo, Count(Quantidade) as Quantidade, Total_Geral = (Select Sum(Quantidade) From Teste) From Teste Group By Codigo, Total Go
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
pessoal,
eu nao tenho o campo quantidade , eu consigo ele atraves do count da tabela...
tentar explicar melhor ...
minha tabela é formada pelo seguintes campos:
(É uma tabela que contem todos os chamados que sao abertos no setor de frota, e eles querem saber a quantidade de chamados abertos pelos grupos e o total geral aberto no mes.
Estrutura da tabela
Grupo | chamado | dias
A10 | 001 | 3
A20 | 002 | 7
A30 | 003 |8
A30 | 003 |4
Preciso que a query me mostre da seguinte forma:
Grupo | quantidade total grupo | total Geral do mes
A10 | 3 | 100
A30 |50 |100
A40 | 70 |100
A89 | 5 |100
Com essa query abaixo consigo trazer o quantitativo de cada grupo
SELECT GRUPO, COUNT(*) AS TOTAL_GRUPO, FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO
Grupo | quantidade total grupo
A10 | 3
A30 |50
A40 | 70
A89 | 5
Porém preciso que ele liste em uma coluna o total geral, ficando assim:
Grupo | quantidade total grupo | total Geral do mes
A10 | 3 | 100
A30 |50 |100
A40 | 70 |100
A89 | 5 |100
-
Essa query te atende ??
SELECT GRUPO , Mes = MONTH(CH_DATA_ABERTURA), QuantidadeGrupo = COUNT() OVER( PARTITION BY GRUPO), TotalGeral = COUNT() OVER() FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO,Mes;
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves
- Marcado como Resposta carine.couto quarta-feira, 5 de julho de 2017 19:28
-
Boa tarde,
Carine, experimente fazer uns testes dessa forma:
SELECT GRUPO, COUNT(*) AS TOTAL_GRUPO, SUM(COUNT(*)) OVER() AS TOTAL_GERAL FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta carine.couto quarta-feira, 5 de julho de 2017 19:28
-
-
Boa tarde,
Carine, experimente fazer uns testes dessa forma:
SELECT GRUPO, COUNT(*) AS TOTAL_GRUPO, SUM(COUNT(*)) OVER() AS TOTAL_GERAL FROM vw_frota_media_ch_v V WHERE CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) >= '20170401' AND CONVERT(VARCHAR(8), CH_DATA_ABERTURA, 112) <= '20170430' GROUP BY GRUPO
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
Gapimex,
Legal, legal, você sugeriu o uso da função OVER() interessante pois para este tipo de solução ela acaba sendo mais indicada e apresenta uma possibilidade de performance superior ao uso de subquery.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]