Usuário com melhor resposta
SELECT COUNT com vários dados

Pergunta
-
Eu preciso fazer um select para mostrar as estatísticas do site...
Ex.: Veiculos cadastrados: 3.015
Imóveis cadastrados: 1.560
Diversos cadastros: 2.123
Total de cadastros: 6.698
Total de denuncias: 2
Eu tenho a tabela anuncio onde tem as informaçoes do anuncio.
Eu poderia fazer um select para cada item dessa maneira:
SELECT COUNT(idanuncio) as veiculos FROM anuncio WHERE secao = 1
A única coisa que eu tenho que mudar na query é o valor da secao, onde veiculos é 1, imoveis é 2, diversos é 3, teria que somar todos ou simplesmente fazer a query sem o WHERE e o total de denuncias que é um campo na tabela onde é true ou false.
Eu queria saber se tem como fazer isso em uma query só, ou tenho que montar uma query para cada item que eu quero contar.
Estou usando SQL Server 2008 com Procedures, asp.net e c#, mas eu queria fazer isso somente na Procedure
Obrigado :D
Respostas
-
Murilo,
A melhor maneira acho que seria um pivot table, todo caso, creio que a query abaixo atenda o que voce precisa:
--CRIA TABELA
Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))
--CARGA DE DADOS
Insert Into @Anuncios Values
(1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),
(2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),
(3, 'Diversos'), (3, 'Diversos')
--SELECT
select
distinct
(select count(*) from @Anuncios where IdAnuncio = 1) as Veiculos,
(select count(*) from @Anuncios where IdAnuncio = 2) as Imoveis,
(select count(*) from @Anuncios where IdAnuncio = 3) as Diversos
from @Anuncios a
group by a.DsAnuncio
Oracle OCA11g, MCC 2011!- Marcado como Resposta Murilo Bom sexta-feira, 13 de maio de 2011 13:23
Todas as Respostas
-
-
Segue um exemplo da sua situação. Além do select do Fabrizzio, acrescentei a linha referente ao total.
/* Declara a tabela e cadastra 5 veículos, 7 imóveis e 2 Diversos */
Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))
Insert Into @Anuncios Values
(1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),
(2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),
(3, 'Diversos'), (3, 'Diversos')
Select
Anúncio = '-> ' + DsAnuncio + ' cadastrados: ' + Convert(VarChar(20), Count(IdAnuncio))
From
@Anuncios
Group by
DsAnuncio
Union
Select
Anúncio = 'Total cadastrados: ' + Convert(VarChar(20), Count(IdAnuncio))
From
@Anuncios
Roberson Ferreira
Se esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
-
é que na verdade que queria retornar os valores desta forma:
________________________________
carros | imoveis | diversos | total |
200 | 304 | 403 | 907 |
Eu tentei usar o UNION, mas só retornou a primeira coluna
Vou colocar como fiz o sql:Mas isso nao der certo, pois só retornou o primeiro select...select COUNT(idanuncio) as carros from classificados_anuncio where secao = 1 union select COUNT(idanuncio) as imoveis from classificados_anuncio where secao = 2 union select COUNT(idanuncio) as diversos from classificados_anuncio where secao = 3 union select COUNT(idanuncio) as total from classificados_anuncio
-
Murilo,
A melhor maneira acho que seria um pivot table, todo caso, creio que a query abaixo atenda o que voce precisa:
--CRIA TABELA
Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))
--CARGA DE DADOS
Insert Into @Anuncios Values
(1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),
(2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),
(3, 'Diversos'), (3, 'Diversos')
--SELECT
select
distinct
(select count(*) from @Anuncios where IdAnuncio = 1) as Veiculos,
(select count(*) from @Anuncios where IdAnuncio = 2) as Imoveis,
(select count(*) from @Anuncios where IdAnuncio = 3) as Diversos
from @Anuncios a
group by a.DsAnuncio
Oracle OCA11g, MCC 2011!- Marcado como Resposta Murilo Bom sexta-feira, 13 de maio de 2011 13:23
-
Murilo, como a dúvida já foi respondida, não sei nem se verá esta informação, rs.
Mas só para constar, com o PIVOT vocÊ resolveria da seguinte forma:
/* Declara a tabela e cadastra 5 veículos, 7 imóveis e 2 Diversos */
Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))
Insert Into @Anuncios Values
(1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),
(2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),
(3, 'Diversos'), (3, 'Diversos')
Select [1] as Veículos, [2] as Imóveis, [3] as Diversos
From @Anuncios Pivot (Count(DsAnuncio) For IdAnuncio in ([1],[2],[3])) P
Roberson Ferreira
Se esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Fabrizzio CaputoModerator sexta-feira, 13 de maio de 2011 15:52