Ir para conteúdo

Arquivado

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

lendadomato

Consulta entre datas

Recommended Posts

Galera tenha a função q recupera os registros dos anos q tiveram vendas, gostaria de

recuprar os anos com o mes de janeiro de cada ano, banco de dados é Access.

 

 

Set rsmes = conexao.Execute("SELECT distinct Year(datacompra) as mesano from compras")

While Not rsmes.EOF
strTextoHtml = strTextoHtml & "<b>" & rsmes("mesano") & "</b>" 
rsmes.MoveNext
Wend
rsmes.Close 
Set rsmes = Nothing

me retorna:

2008 2009 2010

 

mas gostaria que retornasse:

Jan Jan Jan

2008 2009 2010

 

a intenção é gerar um gráfico com os dados, depois farei a soma dos

valores de cada Mês relativo ao seu ano.

 

Desde já gradeço a ajuda de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta usar

 

 

SELECT distinct Month(dataCompra) & "-" & Year(datacompra) as mesano from compras.

 

Só que uma pequena observação esse cara ordena por mês , ou seja, se você tem três anos (Ex 2008,2009,2010) você teria um order by em ordem alfabética pois ele trata esse cara como string.

 

 

 

Existe a forma bonita que é usando o format(datacompra,'MM/yyyy'), isso no construtor de expressões...

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel, não funcionou

 

usando:

Set rsmes = conexao.Execute("SELECT distinct Month(datacompra) as mesano from compras")

consigo o retorno assim:

1 2 3 4 5 6 7 8 9 10 11 12

2008 2009 2010

 

mas gostaria do retorno com o mes de Janeiro relativo os anos retornados, não precisa

ser retornado os anos juntos pois, já os tenho:

1 1 1

2008 2009 2010

 

assim sendo esses dados entrarão em uma tabela para criação de um gráfico

com os dados de Janeiro e assim em diante, conseguindo o primeiro mes consigo

montar para os meses seguintes.

 

Veja o gráfico já montado mas estou inserindo os dados na unha, e todos os meses

tenho que inserir novos dados assim q alguma compra é efetuada.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou "colunar" uma das variáveis ?

 

 

select Month(datacompra),
       sum(case when Year(datacompra) = '2008' then valor else 0 end) a2008,
       sum(case when Year(datacompra) = '2009' then valor else 0 end) a2009,    
       sum(case when Year(datacompra) = '2010' then valor else 0 end) a2010
from   compras
group by Month(datacompra)

Creio que assim dá para montar o gráfico, via excel ou outro programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Motta,

mas não deu, e tbm nesse caso eu teria q fazer o agrupamento a

cada ano q iniciar, temos q fazer é o agrupamento mesmo mas só q dimanicamente

como os anos impressos, no grafico assim q for efetuada uma compra no ano de 2011

ela automaticamente estará impressa no gráfico junto com o ano de 2011 e assim sucessivamente.

 

Para deixar mais claro segue ilustração do agrupamento q preciso:

10/01/2008

10/01/2008

10/01/2008

11/01/2008

11/01/2008

13/01/2008

24/01/2008

25/01/2008

30/01/2008

02/01/2009

03/01/2009

16/01/2009

16/01/2009

16/01/2009

28/01/2009

28/01/2009

18/01/2010

18/01/2010

18/01/2010

18/01/2010

18/01/2010

18/01/2010

21/01/2010

21/01/2010

22/01/2010

26/01/2010

28/01/2010

28/01/2010

Imagem Postada

 

que vai se transformar em:

Imagem Postada aqui entrarão os outros meses

 

essa consulta retorna todas as datas de qualquer mes

Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where datacompra order by pedido")
o q eu preciso é q retorne apenas todas as compras efetuadas

nos dias do mes de Janeiro de cada ano dinamicamente,para quando chegar os próximos anos

eu não precisar de mexer na consulta, como falei a parte dos anos já está resolvida, eu preciso do

agrupamento dessas datas mesmo q eu tenha q montar 12 consultas sendo 1 para cada mes, a soma

a conntagem e a criação das "TD" coloridas q irão subir

no gráfico já estão prontas e resolvidas.

 

Se vcs me ajudarem a deixar a consulta como na ilustração acima

eu vou ficar muito feliz, agradeço a atenção de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera, tá difícil, fiz o seguinte para retornar o mes de janeiro:

 

Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=1 order by pedido")

deu:

 

01/10/2008

14/01/2009

15/01/2009

20/01/2009

23/01/2009

23/01/2009

30/01/2009

01/05/2009

01/10/2009

01/12/2009

18/01/2010

18/01/2010

18/01/2010

18/01/2010

18/01/2010

18/01/2010

21/01/2010

21/01/2010

22/01/2010

26/01/2010

28/01/2010

28/01/2010

01/02/2010

 

vejam q retornou outros meses q têem na data o nº 1

 

desse jeito não posso agrupar por ano, e somar ou contar quantos registros, por isso

q estou pedindo o retorno das datas para certificar se está certo, sei q em 2008

não tivemos compras nos meses de Janeiro, Fevereiro e Março pois a loja foi aberta em Abril.

 

como posso proceder? sei q este é o caminho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa consulta retorna meses diferentes:

 

Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=1 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=2 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=3 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=4 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=5 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=6 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=7 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=8 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=9 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=10 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=11 order by pedido")
Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=12 order by pedido")

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim.

 

O que está usando para montar os gráficos ?

 

select Year(datacompra) ano,
       Month(datacompra) mes,       
       sum(valor) valor 
from   compras
group by Year(datacompra),Month(datacompra)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

para cada consulta de mes estou usando assim:

 

Set rsmes = conexao.Execute("SELECT totalcompra as mesano from compras where Month(datacompra)=1 order by pedido")
 
strTextoHtml = strTextoHtml & "<td align=""center"" height=500  valign=""bottom"" style='border: 1px solid #cccccc;' >"

While Not rsmes.EOF
strTextoHtml = strTextoHtml & "<FONT face=tahoma style=font-size:11px>  <b><FONT face=tahoma style=font-size:11px color=blue>"
strTextoHtml = strTextoHtml & "" & rsmes("total") & "</b></font><br>" 
rsmes.MoveNext
Wend
rsmes.Close 
Set rsmes = Nothing

strTextoHtml = strTextoHtml & "</td>"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que você precise de um programa ou objeto que monte os gráficos, tipo O Crystal Reports ou até mesmo o Excel.

 

A SQL que te passei vai te retornar algo assim :

 

ano   | mes   |  valor
2007  | 01    |  123,45
2007  | 02    |  98,76
...
2009  | 12    |  234,56
2010  | 01    |  345,67

Um gráfico do tipo pedido não é difícil de ser montado, faça a experiência no Excel.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

vou dar uma olhada, mas sei q não vou conseguir pois o campo

totalcompra onde stão gravados os valores das compras estão

criptografados, só no ASP q consigo descriptografá-los, vou tentar

com a sua SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

cara, valeu mesmo, deu certo, a instrução q você passou retornou:

 

Ano Mês Total

2008 1 1

2008 2 1

2008 3 1

2008 4 8

2008 5 7

2008 6 7

2008 7 2

2008 8 10

2008 9 12

2008 10 12

2008 11 12

2008 12 5

2009 1 9

2009 2 19

2009 3 4

2009 4 7

2009 5 11

2009 6 9

2009 7 7

2009 8 3

2009 9 5

2009 10 9

2009 11 15

2009 12 6

2010 1 13

2010 4 2

 

retorno usando:

Set anoss = conexao.Execute("select Year(datacompra) as ano, Month(datacompra) as mes, count(datacompra) as total from compras group by Year(datacompra),Month(datacompra)")

 

Agora tá fácil montar o gráfico com a consulta,

mas só uma última dúvida, pq tivemos retorno no valor de 1

dos meses 1,2,3 de 2008 q não tiveram compras, o certo não seria 0 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara a consulta tá esquisita, fiz ao invés de contar os registros eu fiz um Last para ver qual quais datas está listando.

 

no mes 1,2 e 3 de 2008 q não tem compras e a consulta está retornando a data errada:

Ano Mês Data

2008 1 01/10/2008

2008 2 02/10/2008

2008 3 03/06/2008

Veja q está retornando o dia de outro mes, por isso está listando compras nestes meses.

 

e outra consulta q reparei q está retornando errado é:

Ano Mês Data

2010 1 21/01/2010

2010 4 04/02/2010

Veja q temos até o mes 2 de 2010 e a consulta está retornando o mes 4 pq temos compras

no dia 04/02/2008, e a soma da quantidade de compras nesses meses estão certas, tanto

no mes 1 e mes 2 do ano de 2010, terei problemas com isso pq vou preparar os meses para

as tabelas e se a consulta me retornar 4 a soma irá entrar em Abril.

 

como podemos corrigir esse erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Motta,

 

quase saiu um belíssimo gráfico, pena q as datas estão erradas

mas dá pra ir levando desse jeito, muito obrigado pela atenção!

Imagem Postada

 

se alguém puder ajudar consertar as datas eu agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que representa a barra , quantidade de vendas ou o total destas ?

 

Faça uma lista aberta das vendas para checar o gráfico talvez uma data errada esteja na base gerando o erro que falou (1 quando deveria ser zero).

 

Outra coisa que pode gerar erro é o formato de saída da data, qual está usando (d/m/a/ m/d/a a/m/d)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

as barras representam a quantidade de vendas pois estamos contando o campo datacompra, segue a lista aberta retornando as respectivas datas:

 

Imagem Postada

 

veja q tem datas no lugar errado, quanto ao formato não estou usando nenhum, nas barras contém um alt para

mostrar a quantidade, segue a consulta:

 

Set rsmes = conexao.Execute("SELECT datacompra as mesano from compras where Month(datacompra)=1 order by pedido")

ou

 

Set anoss = conexao.Execute("select Year(datacompra) as ano, Month(datacompra) as mes, count(datacompra) as total from compras group by Year(datacompra),Month(datacompra)")

e q o que expressa os resultados:

 

" & rsmes("mesano") & "

os dois retornam a mesma lista, como ve não tem nenhum tipo de formatação das datas e tbm não sei como o fazer.

 

formatei a data assim: Format([datacompra],'DD/MM/YYYY') veja antes e depois da formatação:

 

Imagem Postada

 

o resultado correto seria esse abaixo, não tenho registros no ano de 2008

 

14/01/2009

15/01/2009

20/01/2009

23/01/2009

23/01/2009

30/01/2009

18/01/2010

18/01/2010

18/01/2010

18/01/2010

18/01/2010

18/01/2010

21/01/2010

21/01/2010

22/01/2010

26/01/2010

28/01/2010

28/01/2010

 

vejo q a formatação das datas não é o problema, pois que toda fórma de formatação

q usei me retorna o mesmo resultado, vejam o mes de Fevereiro:

 

Imagem Postada

 

o resultado correto seria esse abaixo, não tenho registros no ano de 2008

 

11/02/2009

11/02/2009

12/02/2009

16/02/2009

17/02/2009

18/02/2009

18/02/2009

20/02/2009

26/02/2009

01/02/2010

04/02/2010

04/02/2010

 

talvez o problema persiste pq o banco de dados é Access,

agradeço mais uma vez à quem possa me ajudar.

 

Alô galera q estava de folga no Carnaval, agora retornando

talvez tenha mais alguém q possa me ajudar, ainda não resolvi

o probleminha da consulta das datas.

 

Desde já agradeço!

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.