Array
(
)

Consulta agrupando datas de uma coluna em períodos

Maallsi
   - 17 nov 2004

Pessoal, boa tarde! Estou com um problema consumindo meus neurônios e gostaria que algum fera me ajudasse:
Estou tentando montar uma consulta que me traga uma coluna data dividida em quadrimestres (no caso, um ano inteiro, a mesma coluna seria apresentada 3 vezes = 3 quadrimestres). Ou seja:

VENDAS QD1 | VENDAS QD2 | VENDAS QD3
(Jan/Fev/Mar/Abr) (Mai/Jun/Jul/Ago) (Set/Out/Nov/Dez)

Grato,

Mauro Almeida

Robertolucio
   - 17 nov 2004

Oi Mauro,

Para vc ter uma idéia montei o script abaixo. Ele é bem simples, não procurei pela melhor performance, devido ao meu pouco tempo, mas acredito que lhe dará uma idéia.
Se não servir, retorna que amanhã eu posso estudar melhor.

Espero ter lhe ajudado.

Att,
Roberto

create table teste (id int identity, data_venda datetime not null, valor_venda numeric(11,2) not null)
insert into teste values (convert(datetime, ´Jan 03 04´), 100.00)
insert into teste values (convert(datetime, ´Jan 13 04´), 150.00)
insert into teste values (convert(datetime, ´Feb 14 04´), 200.00)
insert into teste values (convert(datetime, ´Feb 15 04´), 230.00)
insert into teste values (convert(datetime, ´Mar 03 04´), 10.00)
insert into teste values (convert(datetime, ´Mar 13 04´), 15.00)
insert into teste values (convert(datetime, ´Apr 14 04´), 20.00)
insert into teste values (convert(datetime, ´Apr 15 04´), 23.00)
insert into teste values (convert(datetime, ´Apr 03 04´), 500.00)

insert into teste values (convert(datetime, ´May 11 04´), 100.00)
insert into teste values (convert(datetime, ´May 21 04´), 200.00)
insert into teste values (convert(datetime, ´Jun 04 04´), 300.00)
insert into teste values (convert(datetime, ´Jun 17 04´), 400.00)
insert into teste values (convert(datetime, ´Jul 03 04´), 500.00)
insert into teste values (convert(datetime, ´Jul 23 04´), 600.00)
insert into teste values (convert(datetime, ´Aug 01 04´), 500.00)
insert into teste values (convert(datetime, ´Aug 31 04´), 500.00)

insert into teste values (convert(datetime, ´Sep 06 04´), 600.00)
insert into teste values (convert(datetime, ´Sep 07 04´), 600.00)
insert into teste values (convert(datetime, ´Oct 03 04´), 130.00)
insert into teste values (convert(datetime, ´Oct 03 04´), 270.00)
insert into teste values (convert(datetime, ´Nov 03 04´), 300.00)
insert into teste values (convert(datetime, ´Nov 03 04´), 400.00)
insert into teste values (convert(datetime, ´Dec 10 04´), 200.00)
insert into teste values (convert(datetime, ´Dec 31 04´), 250.00)

select ( select sum(valor_venda) from teste where data_venda between CONVERT (datetime, ´Jan 01 04´) AND CONVERT (datetime, ´Apr 30 04´) GROUP BY year(data_venda) ) as ´Vendas QD1´,
( select sum(valor_venda) from teste where data_venda between CONVERT (datetime, ´May 01 04´) AND CONVERT (datetime, ´Aug 31 04´) GROUP BY year(data_venda) ) as ´Vendas QD2´,
( select sum(valor_venda) from teste where data_venda between CONVERT (datetime, ´Sep 01 04´) AND CONVERT (datetime, ´Dec 31 04´) GROUP BY year(data_venda) ) as ´Vendas QD3´

drop table teste

Maallsi
   - 18 nov 2004

Olá Roberto,
Obrigado pela ajuda, foi-me muito útil.
Um abraço,

Mauro Almeida.

Citação:
Oi Mauro,

Para vc ter uma idéia montei o script abaixo. Ele é bem simples, não procurei pela melhor performance, devido ao meu pouco tempo, mas acredito que lhe dará uma idéia.
Se não servir, retorna que amanhã eu posso estudar melhor.

Espero ter lhe ajudado.

Att,
Roberto

create table teste (id int identity, data_venda datetime not null, valor_venda numeric(11,2) not null)
insert into teste values (convert(datetime, ´Jan 03 04´), 100.00)
insert into teste values (convert(datetime, ´Jan 13 04´), 150.00)
insert into teste values (convert(datetime, ´Feb 14 04´), 200.00)
insert into teste values (convert(datetime, ´Feb 15 04´), 230.00)
insert into teste values (convert(datetime, ´Mar 03 04´), 10.00)
insert into teste values (convert(datetime, ´Mar 13 04´), 15.00)
insert into teste values (convert(datetime, ´Apr 14 04´), 20.00)
insert into teste values (convert(datetime, ´Apr 15 04´), 23.00)
insert into teste values (convert(datetime, ´Apr 03 04´), 500.00)

insert into teste values (convert(datetime, ´May 11 04´), 100.00)
insert into teste values (convert(datetime, ´May 21 04´), 200.00)
insert into teste values (convert(datetime, ´Jun 04 04´), 300.00)
insert into teste values (convert(datetime, ´Jun 17 04´), 400.00)
insert into teste values (convert(datetime, ´Jul 03 04´), 500.00)
insert into teste values (convert(datetime, ´Jul 23 04´), 600.00)
insert into teste values (convert(datetime, ´Aug 01 04´), 500.00)
insert into teste values (convert(datetime, ´Aug 31 04´), 500.00)

insert into teste values (convert(datetime, ´Sep 06 04´), 600.00)
insert into teste values (convert(datetime, ´Sep 07 04´), 600.00)
insert into teste values (convert(datetime, ´Oct 03 04´), 130.00)
insert into teste values (convert(datetime, ´Oct 03 04´), 270.00)
insert into teste values (convert(datetime, ´Nov 03 04´), 300.00)
insert into teste values (convert(datetime, ´Nov 03 04´), 400.00)
insert into teste values (convert(datetime, ´Dec 10 04´), 200.00)
insert into teste values (convert(datetime, ´Dec 31 04´), 250.00)

select ( select sum(valor_venda) from teste where data_venda between CONVERT (datetime, ´Jan 01 04´) AND CONVERT (datetime, ´Apr 30 04´) GROUP BY year(data_venda) ) as ´Vendas QD1´,
( select sum(valor_venda) from teste where data_venda between CONVERT (datetime, ´May 01 04´) AND CONVERT (datetime, ´Aug 31 04´) GROUP BY year(data_venda) ) as ´Vendas QD2´,
( select sum(valor_venda) from teste where data_venda between CONVERT (datetime, ´Sep 01 04´) AND CONVERT (datetime, ´Dec 31 04´) GROUP BY year(data_venda) ) as ´Vendas QD3´

drop table teste