Ir para conteúdo

Arquivado

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

Cesão

[Resolvido] Listar faturamento por dia

Recommended Posts

Olá, pessoal. Estou fazendo um sistema de pedidos online para um cliente. Uma das tabelas guarda os pedidos do dia, e cada registro possui os campos:

ID DO PEDIDO | ID DO CLIENTE | DATA DO PEDIDO | VALOR DO PEDIDO

 

Eu gostaria de mostrar na tela assim:

 

Hoje - R$ 200,00

Ontem - R$ 700,00

10/03 - R$ 1.100,00

09/03 - R$ 230,00

 

E assim vai... do mês inteiro e até dos meses passados. Como faço? Porque tentei como mostrado abaixo, mas mesmo colocando DISTINCT, as datas se repetem.

 

SELECT DISTINCT a.DATA_PEDIDO, SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
LEFT OUTER JOIN TBL_CLIENTES b on a.ID_CLIENTE=b.ID_CLIENTE
WHERE MONTH(a.DAT_PEDIDO)=MONTH(GETDATE())
GROUP BY a.DAT_PEDIDO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi seu questionamento!

 

Seria nome do cliente,data, valor?

 

Tenta algo assim:

SELECT b.CAMPO_NOME_CLIENTE, a.DATA_PEDIDO, SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
LEFT OUTER JOIN TBL_CLIENTES b on a.ID_CLIENTE=b.ID_CLIENTE
GROUP BY a.ID_CLIENTE,a.DAT_PEDIDO

Se você não precisar do nome do cliente pode retirar o LEFT OUTER JOIN.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução seria usar o CASE, procure a síntaxe no manual do SQL do BD em questão.

 

 

Exemplo

Compartilhar este post


Link para o post
Compartilhar em outros sites

jothaz, tem razão. Nao vou precisar do nome do cliente, então excluo o left outer join. Mas o que preciso não é apenas listar cada pedido?

O que quer é que eles sejam somados por dia... Não quero saber todos os pedidos de cada dia, mas apenas a soma de valores para cada dia.

 

Motta, não entendi o modelo de Case? Para que ele serve afinal?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi acho que basta a sequinte query:

SELECT a.DATA_PEDIDO, SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
GROUP BY a.DAT_PEDIDO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi acho que basta a sequinte query:

SELECT a.DATA_PEDIDO, SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
GROUP BY a.DAT_PEDIDO

Então, daria certo, mas é que minhas datas são iguals no dia, mes e ano, mas não são no minuto, segundo e milisegundo. Como faço para ele mostrar a soma "desconsiderando" minuto, segundo e milisegundo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use CONVERT:

 

SELECT CONVERT(a.DATA_PEDIDO,101), SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
GROUP BY a.DAT_PEDIDO

Mais informações sobre manipulação de datas: http://forum.imasters.com.br/index.php?/topic/224454-manipulando-data-no-sql-server-conteudo-alterado/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma correção:

 

SELECT CONVERT(a.DATA_PEDIDO,101), SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
GROUP BY CONVERT(BY a.DAT_PEDIDO,101)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma correção:

 

SELECT CONVERT(a.DATA_PEDIDO,101), SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
GROUP BY CONVERT(BY a.DAT_PEDIDO,101)

Opa, jothaz!! Obrigado cara!! Era justamente essa direção que eu precisava.

Ficou assim:

 

SELECT CONVERT(CHAR,a.DATA_PEDIDO,103) AS DIA, SUM(a.NUM_VALOR_PEDIDO) AS TOTAL_DO_DIA
FROM TBL_PEDIDOS a
GROUP BY CONVERT(CHAR,a.DATA_PEDIDO,103)

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.