Fórum Relatório de Vendas Agrupadas por Cliente #57576
03/01/2007
0
A consulta abaixo faz quase isso, mas não traz o TOTAL_DO_CLIENTE.
Como ficaria uma instrução para fazer o que eu preciso?
´
SELECT CLIENTE, PRODUTO, NOMECLIENTE, DESCRICAO,
SUM(SUBTOTAL) AS SOMA_VENDAS, SUM(QUANTIDADE)AS QTDE_DO_ITEM
FROM VIEW_CURVA_ABC_PRODUTOS WHERE DATA
BETWEEN :VInicio AND :VFim GROUP BY 1,2,3,4
´
Obs.: sei que eu poderia colocar um RLDBResult e somar o valor SOMA_VENDAS de cada cliente, mas eu preciso que esse valor já seja trazido pela consulta, pois preciso ordenar os registros mostrando primeiro o cliente que tem o maior valor em vendas, ou seja, a soma do SOMA_VENDAS de todos os produtos que o cliente comprou.
Obrigado.
Armindo
Curtir tópico
+ 0Posts
04/01/2007
Fortaum
SELECT CLIENTE, PRODUTO, NOMECLIENTE, DESCRICAO,
SUM(SUBTOTAL * QUANTIDADE) AS SOMA_VENDAS, SUM(QUANTIDADE)AS QTDE_DO_ITEM
FROM VIEW_CURVA_ABC_PRODUTOS WHERE DATA
BETWEEN :VInicio AND :VFim GROUP BY 1,2,3,4
- Acho q é isso...
Gostei + 0
04/01/2007
Armindo
O que eu preciso é o total dos SOMA_VENDAS de todos os registros agrupado por cliente.
Vou dar um exemplo do que eu preciso:
Venda 1
- Cliente A;
- Produtos vendidos: 2 itens do produto X, a R$ 4,00 e 3 itens do produto Y, R$ a 5,00;
Venda 2
- Cliente A;
- Produtos vendidos: 4 itens do produto X, a R$ 3,00 e 6 itens do produto Y, R$ a 2,00;
Venda 3
- Cliente B;
- Produtos vendidos: 5 itens do produto X, a R$ 6,00 e 2 itens do produto Y, R$ a 4,00.
Do jeito que está, a consulta mostra os seguintes resultados:
Cliente A
- Produto X: SOMA_VENDAS = 20,00 e QTDE_DO_ITEM = 06;
- Produto Y: SOMA_VENDAS = 27,00 e QTDE_DO_ITEM = 09;
Cliente B
- Produto X: Valor = 30,00 e QTDE_DO_ITEM = 05;
- Produto Y: Valor = 8,00 e QTDE_DO_ITEM = 02;
O que eu preciso, além desses resultados é que me traga o valor total das vendas (TOTAL_DO_CLIENTE) a cada cliente. No caso Clienta A = R$ 47,00 e Cliente B = R$ 38,00
Qualquer idéia ajuda.
Obrigado
Gostei + 0
08/01/2007
Armindo
Gostei + 0
08/01/2007
Xtreme
E se voce fizer um subselect junto ao select somando o total do cliente!
tipo esse mas nao sei se ta certo:
SELECT A.CLIENTE, A.PRODUTO, A.NOMECLIENTE, A.DESCRICAO, SUM(A.SUBTOTAL) AS SOMA_VENDAS, SUM(A.QUANTIDADE)AS QTDE_DO_ITEM, (SELECT B.CLIENTE, SUM(B.SUBTOTAL) FROM VIEW_CURVA_ABC_PRODUTOS B WHERE B.CLIENTE = A.CLIENTE) FROM VIEW_CURVA_ABC_PRODUTOS A WHERE A.DATA BETWEEN :VInicio AND :VFim GROUP BY 1,2,3,4
Gostei + 0
08/01/2007
Emerson Nascimento
SELECT A.CLIENTE, A.PRODUTO, A.NOMECLIENTE, A.DESCRICAO, SUM(A.SUBTOTAL) SOMA_VENDAS, SUM(A.QUANTIDADE) QTDE_DO_ITEM, (SELECT SUM(B.SUBTOTAL) FROM VIEW_CURVA_ABC_PRODUTOS B WHERE B.DATA BETWEEN :VInicio AND :VFim AND B.CLIENTE = A.CLIENTE) TOTAL_CLIENTE FROM VIEW_CURVA_ABC_PRODUTOS A WHERE A.DATA BETWEEN :VInicio AND :VFim GROUP BY 1,2,3,4
Gostei + 0
08/01/2007
Armindo
SELECT A.CLIENTE, A.PRODUTO, A.NOMECLIENTE, A.DESCRICAO, SUM(A.SUBTOTAL) SOMA_VENDAS, SUM(A.QUANTIDADE) QTDE_DO_ITEM, (SELECT SUM(B.SUBTOTAL) FROM VIEW_CURVA_ABC_PRODUTOS B WHERE B.DATA BETWEEN :VInicio AND :VFim AND B.CLIENTE = A.CLIENTE) TOTAL_CLIENTE FROM VIEW_CURVA_ABC_PRODUTOS A WHERE A.DATA BETWEEN :VInicio AND :VFim GROUP BY 1,2,3,4
Funcionar funciona. Só que ficou muito lenta a consulta. O que poderia se fazer para melhorar a performance?
Obrigado.
Gostei + 0
08/01/2007
Emerson Nascimento
Gostei + 0
08/01/2007
Armindo
CREATE VIEW VIEW_CURVA_ABC_PRODUTOS(
PRODUTO,
DATA,
DESCRICAO,
SUBTOTAL,
QUANTIDADE,
CLIENTE,
NOMECLIENTE)
AS
SELECT VENDADETALHE.PRODUTO, VENDAMESTRE.DATA, PRODUTOS.DESCRICAO AS DESCRICAOPRODUTO, VENDADETALHE.SUBTOTAL, VENDADETALHE.QUANTIDADE, VENDAMESTRE.CLIENTE, CLIENTES.NOME AS NOMECLIENTE FROM VENDAMESTRE INNER JOIN VENDADETALHE ON (VENDAMESTRE.CODIGOMESTRE = VENDADETALHE.CODIGOMESTRE) INNER JOIN PRODUTOS ON (VENDADETALHE.PRODUTO = PRODUTOS.CODIGO) INNER JOIN CLIENTES ON (VENDAMESTRE.CLIENTE = CLIENTES.CODIGO) WHERE VENDACANCELADA IS NULL UNION ALL SELECT SERVICOPECAS.PRODUTO, SERVICOMESTRE.DATA, PRODUTOS.DESCRICAO AS DESCRICAOPRODUTO, SERVICOPECAS.SUBTOTAL, SERVICOPECAS.QUANTIDADE, SERVICOMESTRE.CLIENTE, CLIENTES.NOME AS NOMECLIENTE FROM SERVICOMESTRE INNER JOIN SERVICOPECAS ON (SERVICOMESTRE.CODIGOMESTRE = SERVICOPECAS.CODIGOMESTRE) INNER JOIN PRODUTOS ON (SERVICOPECAS.PRODUTO = PRODUTOS.CODIGO) INNER JOIN CLIENTES ON (SERVICOMESTRE.CLIENTE = CLIENTES.CODIGO)WHERE OSCANCELADA IS NULL;
Só tenho índice primário nas tabelas (pelo código). Será isso?
Oibrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)