Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sr.silva

[Resolvido] Compara registros

Recommended Posts

Como faço para comparar registros desse resultado

 

------------------
| MES  ANO  QTD |
------------------
  10  | 2008 | 45
  11  | 2008 | 53
  12  | 2008 | 56
------------------

Preciso comparar as quantidade dos meses.

Sei que dá pra fazer com 3 SQL´s mas..fica complicado fazer isso para um sistema com 5 anos de uso http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif

 

Segue a SQL

select month(dataabertura)MES, year(dataabertura) ANO, count(*)MES
from atendimento group by month(dataabertura), year(dataabertura)

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

sr.silva

 

o que você precisa comparar? a coluna qtd? você precisa trazer somente a qtde maior?

 

abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não expliquei corretamente, peço desculpas.

 

A situação é:

 

Preciso elaborar estatísticas das quantidades de atendimentos em cada mês.

Ex:

MES QTD

11 25

12 47

 

Ao executar a consulta, 'teoricamente' ela me traz o valor de 47-25, entendeu?

 

Agora como fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vamos lá:

 

pelo que entendi, você tem uma coluna data, do tipo datetime (dataabertura)

 

para pegar o mes e ano, você pode usar o datepart

select datepart(day,getdate()) as dia , datepart(month,getdate()) as mes, datepart(year,getdate()) as ano

para fazer um count, tente fazer assim:

select datepar(month,dataabertura), datepart(year,dataabertura), count(*)
from atendimento
group by datepar(month,dataabertura), datepart(year,dataabertura)

Deve ser isso que precisa. Se nao precisar do ano, eh soh tirar ;)

 

Espero ter ajudado.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe amigo, mas você fez a mesma SQL que eu :mellow:

 

A questão da dúvida é:

 

- Como comparar os valores em cada registro ?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

sr.silva,

 

você precisa comparar valor para trazer somente o maior? :unsure:

 

nao entendi o resultado que você precisa :huh:

 

abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!

 

Eu preciso das estatísticas de andamento dos registros abaixo.

Ex:

Quando emitir um relatório, o mesmo mostrará

 

Houve um aumento de x% entre o mês 11/10

Houve um aumento de y% entre o mês 12/11

e etc...

 

Para isso preciso comparar os valores do campo QTD, onde quando for comparar os meses 11 e 10

estarei comparando os valores de 53 e 45 respectivamente.

 

----------------------
| MES  ANO  QTD |
----------------------
  10  | 2008 | 45
  11  | 2008 | 53
  12  | 2008 | 56
------------------

Essa que é a dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select datepart(month,dataabertura) mes, datepart(year,dataabertura) ano, convert(decimal(10,2),count(*)) qtd, 
	convert(decimal(10,2),(select count(*) from #atendimento b where datepart(month,b.dataabertura) +  datepart(year,b.dataabertura) = (datepart(month,a.dataabertura) +  datepart(year,a.dataabertura)) - 1)) mes_ant,
	(count(*) / case when convert(decimal(10,2),(select count(*) from #atendimento b where datepart(month,b.dataabertura) +  datepart(year,b.dataabertura) = (datepart(month,a.dataabertura) +  datepart(year,a.dataabertura)) - 1)) = 0
	then count(*) else convert(decimal(10,2),(select count(*) from #atendimento b where datepart(month,b.dataabertura) +  datepart(year,b.dataabertura) = (datepart(month,a.dataabertura) +  datepart(year,a.dataabertura)) - 1)) end * 100) - 100 as perc_relacao_mes_anterior
from #atendimento a
group by datepart(month,dataabertura), datepart(year,dataabertura), a.dataabertura
order by mes, ano

com auxilio de tabela virtual fica mais simples entender a maracutaia acima:

select datepart(month,dataabertura) mes, datepart(year,dataabertura) ano, convert(decimal(10,2),count(*)) qtd, 
	convert(decimal(10,2),(select count(*) from #atendimento b where datepart(month,b.dataabertura) +  datepart(year,b.dataabertura) = (datepart(month,a.dataabertura) +  datepart(year,a.dataabertura)) - 1)) mes_ant
	into #atendimento_temp
from #atendimento a
group by datepart(month,dataabertura), datepart(year,dataabertura), a.dataabertura
order by mes, ano

SELECT *, (qtd / case when mes_ant = 0 then qtd else mes_ant end * 100) -100 as perc_relacao_mes_anterior
FROM #atendimento_temp

drop table #atendimento_temp

 

outra forma seria com cursor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!

 

Realmente eu iria demorar para chegar a essa resposta sozinho. :[

 

//edit

Para quem leu esse post, por favor desconsiderem a resposta anterior. Errei ao postar.

Acredito que expliquei errado, pois do jeito que estava o resultado mostrava o percentual do mês anterior

e não como comparação do mês atual / mês anterior.

 

Segue:

 

SELECT
 DATEPART(MONTH, dataabertura) MES, DATEPART(YEAR, dataabertura) ANO, CONVERT(DECIMAL(10,2),  ( SELECT COUNT(*) FROM ATENDIMENTO  )  ) QUANTIDADE, 
	
 CONVERT(DECIMAL(10,2), ( 
   SELECT COUNT(*) FROM atendimento b 
   WHERE 
	DATEPART(MONTH, b.dataabertura) + DATEPART( YEAR, b.dataabertura ) = 
	 ( DATEPART(MONTH, a.dataabertura) + DATEPART( YEAR, a.dataabertura ) ) - 1 ) 
	 ) MES_ANTERIOR, 
 
 CONVERT(DECIMAL(10,2), ( 
   SELECT COUNT(*) FROM atendimento b 
   WHERE 
	DATEPART(MONTH, b.dataabertura) + DATEPART( YEAR, b.dataabertura ) =  DATEPART(MONTH, a.dataabertura) + DATEPART( YEAR, a.dataabertura )  ) 
	 ) MES_ATUAL, 

(
 CONVERT(DECIMAL(10,2), ( 
   SELECT COUNT(*) FROM atendimento b 
   WHERE 
	DATEPART(MONTH, b.dataabertura) + DATEPART( YEAR, b.dataabertura ) =  DATEPART(MONTH, a.dataabertura) + DATEPART( YEAR, a.dataabertura )  ) 
	 ) -  --mes atual

 CONVERT(DECIMAL(10,2), ( 
   SELECT COUNT(*) FROM atendimento b 
   WHERE 
	DATEPART(MONTH, b.dataabertura) + DATEPART( YEAR, b.dataabertura ) = 
	 ( DATEPART(MONTH, a.dataabertura) + DATEPART( YEAR, a.dataabertura ) ) - 1 ) 
	 )  --mes anterior
  
 ) * 100 / ( SELECT COUNT(*) FROM atendimento ) 
 
--( CONVERT(DECIMAL(10,2), ( SELECT COUNT(*) FROM atendimento b WHERE DATEPART(MONTH, b.dataabertura) + DATEPART( YEAR, b.dataabertura )  = ( DATEPART(MONTH, a.dataabertura) + DATEPART( YEAR, a.dataabertura ) ) - 1 ) ) * 100 / ( SELECT count(*) FROM atendimento  )   )   as percentual

FROM atendimento a
	
GROUP BY  DATEPART(MONTH,dataabertura), DATEPART(YEAR,dataabertura), a.dataabertura
ORDER BY MES DESC, ANO DESC

 

 

Desse modo temos:

 

----------------------
| MES  ANO  QTD |
----------------------
  10  | 2008 | 45
  11  | 2008 | 53
  12  | 2008 | 56
------------------

Comparando:

 

Mês 12 - 56 Atendimentos

Mês 11 - 53 Atendimentos

 

Percentual referente a quantidade total de atendimentos

Quantidade total = 158

Diferença entre os meses: 56 - 53 = 3 atendimentos

 

300/158 = 1.89% ...

 

===

 

Devem perguntar, pra que necessita disso?

 

Preciso para saber o percentual de atendimentos entre os meses.

 

Fica meus sinceros agradecimentos ! ;)

 

ps: a você também jus2ka ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desse modo temos:

 

----------------------
| MES  ANO  QTD |
----------------------
  10  | 2008 | 45
  11  | 2008 | 53
  12  | 2008 | 56
------------------

Comparando:

 

Mês 12 - 56 Atendimentos

Mês 11 - 53 Atendimentos

 

Percentual referente a quantidade total de atendimentos

Quantidade total = 158

Diferença entre os meses: 56 - 53 = 3 atendimentos

 

300/158 = 1.89% ...

 

===

desculpe minha ignorancia, mas de onde veio esse 300 que você esta dividindo por 158 ???

 

pequeno detalhe 45 + 53 + 56, não seria = 154

 

pra facilitar coloca uma coluna com a coluna percentual na tabela de exemplo acima com os valores que devem ser expostos.

 

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande eriva!

 

Sim..só que estou fazendo apenas consulta referente a 2008.

 

mes 12 = 56
mes 11 = 53

56 - 53 = 3

percentual em relação ao total geral de atendimento = 158

158 - 100
 3   -   x

sacou? 300/158 = 1.89 ! nada de esparta... :P

 

 

Tendo como resultado:

MES | ANO	 |  QUANTIDADE  |  MES_ANTERIOR |   MES_ATUAL  | PERCENTUAL_REFERENTE_MES_ANTERIOR							  
  12  |  2008   |	  159.00	   |		 53.00		 |		57.00	  |				 2.5157232704402

Assim:

No mês 11/2008 tivemos 53 atendimentos já no mês 12/2008 foram 57 atendimentos.

Resultando como diferença 4 atendimentos. Obtendo o percentual em relação a quantidade 159 temos o percentual 2.51%

 

Agora, seria essa a consulta que sugeriu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

creio que nesse caso talvez seja melhor montar um cursor, com ele você tem mais 'liberdade' para brincar com as variáveis

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa eriva, beleza?

 

Minha última resposta, foi pra dizer que consegui o resultado.

 

Apenas demonstrei para você, o que estava procurando ou seja o valor percentual de 2.51%.

 

Logo abaixo questionei sobre a sua pergunta no post acima.

 

..pra facilitar coloca uma coluna com a coluna percentual na tabela de exemplo acima com os valores que devem ser expostos.

 

Seria o campo PERCENTUAL_REFERENTE_MES_ANTERIOR criado acima?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

falai sr.silva beleza

 

era só pra ter o resultando no exemplo, mas o importante é que funcionou.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.