GARANTIR DESCONTO

Fórum Query de sum por mês entre duas datas #482330

12/06/2014

0

Olá pessoal, sou novo aqui. Gostaria de saber se alguém poderia me ajudar em um problema, se possível.

Preciso fazer uma query que retornasse uma coluna de meses, sendo que passo como parâmetro duas datas.

Tenho uma tabela de processos. Essa tabela me dá um total específico, somando todos os processos possíveis
entre essas duas datas. Daí preciso desmembrar esses processos, em cada mês, quantos foram abertos em
cada mês.

Exemplo:

BETWEEN TO_DATE('10/mm/2013','dd/mm/yyyy') AND TO_DATE('11/09/2013','dd/mm/yyyy')

Entre Maio e Setembro foram abertos 44 processos.

Daí queria que retornasse uma Query com os processos desmembrados por mês.

Maio | Junho | Julho | Agosto | Setembro
7 - 5 - 8 - 15 - 9

Não sei o quanto pode ser complexo, mas um início já me ajudaria bastante.

Desde já Obrigado.
Dharion Soares

Dharion Soares

Responder

Post mais votado

12/06/2014

select mes,sum(valor) from table where mes between data1 and data2 group by mes

Fabiano Carvalho

Fabiano Carvalho
Responder

Gostei + 1

Mais Posts

12/06/2014

Dharion Soares

Especificando melhor. Entre duas Datas: BETWEEN TO_DATE('10/01/2014','dd/mm/yyyy') AND TO_DATE('11/09/2014,'dd/mm/yyyy')

O resultado do select seria assim:

Nome Processo | Jan | Fev | Mar | Abr

Processo 01 | 10 | 7 | 4 | 2 (Sum do processo 01 desmembrado do mês 01 ao 04)
------------------------------------------------------------
Processo 02 | 15 | 3 | 2 | 7 (Sum do processo 02 desmembrado do mês 01 ao 04)
Responder

Gostei + 0

12/06/2014

Alex Lekao

Ola Bom dia!!!

Nao sei no Oracle como poderia ser feito exatamente.

Mas para os meses ficarem como colunas, vc teria que basicamente usar o que o Fabiano usou como exemplo e fazer um PIVOT convertendo as linhas em colunas, assim o "layout" ficaria parecido com o que vc mencionou.

Caso nao seja um problema, o exemplo citado pelo Fabiano, ficaria os meses em linhas e o valore de cada mes na coluna, para um periodo de 6 meses teria 6 linhas e uma coluna.

Uma outra possibilidade, talves nao muito performatica, seria utilizar subquerys para montar os meses por colunas, mas ficaria dinamico o processo.

Para ser dinamico somente com o PIVOT mesmo, mas nao sei se tem esse recurso no oracle e nem como fazer um similar.

Desculpe por nao poder ajudar.

Abraco.

Alex - Lekao
Responder

Gostei + 1

12/06/2014

Dharion Soares

Obrigado pela ajuda Fabiano. Tentei assim mas o resultado sai na vertical, mas preciso do resultado por processo e os meses lado a lado.
Responder

Gostei + 0

12/06/2014

Dharion Soares

Obrigado também Alex. Vou dar uma pesquisada melhor nisso.
Responder

Gostei + 0

12/06/2014

Alex Lekao

Blz.

Precisando eh so falar.

Abraco!!!

Alex - Lekao
Responder

Gostei + 0

12/06/2014

Fabiano Carvalho

Obrigado pela ajuda Fabiano. Tentei assim mas o resultado sai na vertical, mas preciso do resultado por processo e os meses lado a lado.

Bom dia.
Em sql server poderia lhe auxiliar, não conheço muito sobre oracle, tente ver isso
http://www.oracle.com/technetwork/pt/articles/sql/principais-caracteristicas-database-2108383-ptb.html

Ou caso queira procurar, pesquise por pivot e unpivot
Responder

Gostei + 0

12/06/2014

Fabiano Carvalho

Mais ou menos isso.

select * from
(
	select  Mes,Hora from Tabela
	WHERE DATA BETWEEN DATA1 AND DATA2
)	source
	pivot (SUM(VALOR) for MES in 
	(
		[JANEIRO],[FEVEREIRO]
	)) [pivote]
ORDER BY 1
Responder

Gostei + 0

12/06/2014

Dharion Soares

Obrigado Fabiano. Vou analisar essa opção. Valeu mesmo.
Responder

Gostei + 0

12/06/2014

Alex Lekao

Dharion,

O Fabiano eh fera!!!!

Pode ir nas dicas dele tranquilo que ele manda muito bem!!!

Abraco.

Alex - Lekao

Obrigado Fabiano. Vou analisar essa opção. Valeu mesmo.
Responder

Gostei + 1

13/06/2014

Dharion Soares

Fabiano, estou com o código aqui do meu Select. Eu vou pegar os valores por linha mesmo. Mas não estou conseguindo unir os valores.

Segue o meu código:

São 4 Tabelas que levam a consulta. Está dando um erro assim no final: Não é uma função de grupo de grupo simples. Aí o erro aponta pra coluna "p.pro_data_abertura"

SELECT SUM (COUNT (ap.ass_descricao)), TO_CHAR(p.pro_data_abertura, 'mm/YYYY') FROM (
SELECT
SUM (COUNT (ap.ass_descricao)) AS qtd,
TO_CHAR(p.pro_data_abertura, 'mm/YYYY') AS dataAb
FROM
processos.pro_assuntos_processos ap,
processos.pro_assuntos_do_processo adp,
processos.pro_processos p,
processos.pro_tramitacoes t
WHERE
ap.ass_codigo = adp.asp_ass_codigo_assunto
AND adp.asp_pro_codigo_processo = p.pro_codigo
AND p.pro_codigo = t.tra_pro_codigo_processo
AND p.pro_data_abertura
BETWEEN TO_DATE('01/03/2014','dd/mm/yyyy') AND TO_DATE('11/05/2014','dd/mm/yyyy')
GROUP BY
TO_CHAR(p.pro_data_abertura, 'mm/YYYY')), processos.pro_assuntos_processos ap, processos.pro_processos p


Esse SUM (COUNT (ap.ass_descricao)) é pra fazer a contagem das descrições dos processos e comparar na tabela tramitações. É pra saber quantos processos
foram tramitados entre as datas. Depois faço um sum pra somar essa contagem. O problema é na hora de agregar,, que fica dando esse erro de função de grupo.

Se puder me ajudar em alguma solução agradeço.
Responder

Gostei + 0

13/06/2014

Dharion Soares

Aqui tem o esquema das tabelas

[img]http://arquivo.devmedia.com.br/forum/imagem/373929-20140613-110214.png[/img]

[img]http://arquivo.devmedia.com.br/forum/imagem/373929-20140613-110232.png[/img]

[img]http://arquivo.devmedia.com.br/forum/imagem/373929-20140613-110243.png[/img]

[img]http://arquivo.devmedia.com.br/forum/imagem/373929-20140613-110253.png[/img]

Desde já obrigado.
Responder

Gostei + 0

13/06/2014

Fabiano Carvalho

tente verificar essa documentação.
http://www.oracle-base.com/articles/11g/pivot-and-unpivot-operators-11gr1.php

Um dica: Crie uma tabela temporaria sem tentar realizar o pivote com a coluna data já formatada (no sql server ele não deixa usar funcao no FOR do pivot).

Resumindo: Crie uma tabela com a sua consulta e depois tente dar um pivote nessa table :)
Responder

Gostei + 0

13/06/2014

Fabiano Carvalho

Não consigo te ajudar tanto, pois nunca trabalhei com oracle.
Responder

Gostei + 0

27/06/2014

Lourival Queiroz

Exemplos de PIVOT

SELECT *
from (
SELECT to_char(created,'mm') mes ,
       nvl(count(OBJECT_NAME),0) qtd
  FROM USER_OBJECTS
 where to_char(created,'yyyy') = '2013'
 GROUP BY TO_CHAR(CREATED,'mm')
)
PIVOT (SUM(QTD) AS QTD
       FOR (mes) IN ('01' AS JAN, '02' AS FEV, '03' AS MAR, '03' AS ABR,
                     '05' AS MAI, '06' AS JUN, '07' AS JUL, '08' AS AGO,
                     '09' AS STB, '10' AS OUT, '11' AS NOV, '12' AS DEZ))


SELECT *
from (
SELECT to_char(created,'mm') mes ,
       count(OBJECT_NAME)    qtd,
       sum(namespace)        valor       
  FROM USER_OBJECTS
 where to_char(created,'yyyy') = '2013'
 GROUP BY TO_CHAR(CREATED,'mm')
)
PIVOT (SUM(QTD)   AS QTD,
       SUM(valor) AS valor
       FOR (mes) IN ('01' AS JAN, '02' AS FEV, '03' AS MAR, '03' AS ABR,
                     '05' AS MAI, '06' AS JUN, '07' AS JUL, '08' AS AGO,
                     '09' AS STB, '10' AS OUT, '11' AS NOV, '12' AS DEZ))

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar