Select para listar vendas com quebra por quinzena

SQL Server

20/06/2014

Boa tarde a todos

Eu conheço muito pouco sql e surgiu uma necessidade para mim

Preciso saber quanto vendeu de determinado produto em uma quinzena, e que o select liste mais de uma quinzena

Se fosse uma data só faria assim

select produto,sum(quantidade) AS QUINZENA1
from
vendas
where
dtvenda between '01/06/2014' and '15/06/2014'
group by produto

O resultado é assim

PRODUTO QUINZENA1
SAPATOX 30
SAPATOY 50

Eu preciso listar outras quinzenas, onde nessa quinzena ele não fizesse a conta do dtvenda entre '01/06/2014' até 15/06/2014' mas sim '16/06/2014' até '30/06/2014' por exemplo

O resultado seria assim

PRODUTO QUINZENA1 QUINZENA2
SAPATOX 30 40
SAPATOY 50 30


Dessa forma posso acompanhar o desempenho de um produto em uma faixa de tempo

Alguém poderia me ajudar como posso fazer isso?


Desde já agradeço

Abraço
Jorge Luiz

Jorge Luiz

Curtidas 0

Melhor post

Marisiana Battistella

Marisiana Battistella

20/06/2014

Segue um exemplo...

select extract(year from dt.data_base) as ano,
         extract(month from dt.data_base) as mês,
         SUM(CASE 
              WHEN extract(day from dt.data_base) <= 15 THEN
                  fvn.vlvendanota
           END ) as primeira_quinzena,
        SUM(CASE 
              WHEN extract(day from dt.data_base) < 15 THEN
                  fvn.vlvendanota
           END ) as segunda_quinzena
from fato_vendanota fvn
join dim_tempo dt
on fvn.idtempo = dt.idtempo
where dt.data_base between '01/01/2014' and '31/05/2014'
group by extract(year from dt.data_base),
         extract(month from dt.data_base)
order by extract(year from dt.data_base),
         extract(month from dt.data_base)


Fiz isso usando o PostgreSQL, tenta adaptar o código...
GOSTEI 1

Mais Respostas

Isaac Jose

Isaac Jose

20/06/2014

boa tarde ja estou indo embora mais acho que esse ex pode ajudar

att

isaac

select
a.cou1,a.cou2 ,MAX(LIME_CHEQUE_Prod_63)LIME_CHEQUE_Prod_63,MAX(LIME_LIME_Prod_94)LIME_LIME_Prod_94
from (select

LIME_CHEQUE_Prod_63= case when b.tintCodCart = 63 then b.monVlrCart
end,
LIME_LIME_Prod_94 = case when b.tintCodCart = 94 then b.monVlrCart
end,
a.cou1 ,a.cou2
from tb1 a left join
tb2 b on
b.cou1 = a.AG and b.cou2 = a.cou2)a
group by a.cou1,a.cou2
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

20/06/2014

Jorge Luiz, vc conseguiu criar select?
GOSTEI 0
Jorge Luiz

Jorge Luiz

20/06/2014

Boa tarde a todos!

Primeiramente agradeço a ajuda de todos amigos

Marisiana muito obrigado mesmo!

Deu tudo certo, aprendi muito com sua dica

Com o extract eu não consegui fazer, eu uso o sql server 2005 e não sei se o extract não funciona nele

Então mudei os extract para as funções YEAR,MONTH e DAY e deu tudo certo, apenas troquei as tabelas e colunas pelas minhas aqui
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

20/06/2014

Por nada! Que bom que te ajudou! =D
Eu inclui o extract pra conseguir testar e utilizei a estrutura que tinha em mãos naquele momento... Imaginei que vc teria que adaptar o código, então recorri as funções mais tradicionais que geralmente rodam em todos os SGBDs...
Não conheço o SQLServer, então não sei te dizer se funciona o extract ou não, mas já vi algum conteúdo na web sobre isso... Talvez tenha alguma particularidade na sintaxe...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

20/06/2014

Ah... Obrigada pelo feedback!
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

20/06/2014

Extract não tem o sql server, pode-se usar datepart, ou month,day,year.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

20/06/2014

Ah, é mesmo! Agora lembrei que uma vez pesquisei sobre isso e encontrei exemplos com o datepart.
Não uso o SQLServer, mas, se não me engano fui pesquisar pra tentar ajudar alguém aqui do fórum.. =)
Obrigada Fabiano!
GOSTEI 0
POSTAR