SCRIPT FORMAS DE PAGAMENTO

Delphi

19/07/2020

Boa noite, o script abaixo me dá um relatorio das vendas de todos vendedores por formas de pagamento separadas. Gostaria
de saber como obter esse mesmo relatorio com os totais com as colunas formas de pagamento e o total exemplo:

VENDEDOR NOME DINHEIRO(01) APRAZO(02) CARTAO(05) CHEQUE(03) TOTAL
005 ADRIANA 7.658,00 12.332,11 4.561,40 0,00 24.551,51


SELECT FT.vendedor,VD.NOME,FT.OPERACAO,FO.DESCRICAO, SUM(LIQUIDO) AS TOTAL FROM FATURAS FT
INNER JOIN VENDEDOR VD ON FT.vendedor=VD.cod_ven INNER JOIN formas FO ON FT.operacao=FO.CODIGO
WHERE (FT.EMISSAO BETWEEN :data1 and :data2) AND FT.STATUS='P' group by FT.vendedor,VD.NOME,FT.OPERACAO,FO.DESCRICAO
ORDER BY VD.NOME
Gilson Silva

Gilson Silva

Curtidas 0

Respostas

Leandro Chiodini

Leandro Chiodini

19/07/2020

Bom dia Gilson
Eu utilizaria um CASE WHEN
para montagem das colunas e somar de acordo com a "Operação" ou forma de pagamento.
Você já usou este recurso?
GOSTEI 0
Gilson Silva

Gilson Silva

19/07/2020

Bom dia Leandro! Podeira postar um exemplo com uso do CASE? Agradeço a atenção.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

19/07/2020

se as tuas formas de pagamento forem fixas:
SELECT
	FT.vendedor,VD.NOME,FT.OPERACAO,
	SUM(CASE WHEN FO.CODIGO=1 THEN LIQUIDO ELSE 0 END) CODIGO1,
	SUM(CASE WHEN FO.CODIGO=2 THEN LIQUIDO ELSE 0 END) CODIGO2,
	SUM(CASE WHEN FO.CODIGO=3 THEN LIQUIDO ELSE 0 END) CODIGO3,
	SUM(CASE WHEN FO.CODIGO=4 THEN LIQUIDO ELSE 0 END) CODIGO4,
	SUM(LIQUIDO) TOTAL
FROM
	FATURAS FT
INNER JOIN
	VENDEDOR VD ON VD.cod_ven = FT.vendedor
INNER JOIN
	formas FO ON FO.CODIGO = FT.operacao
WHERE
	(FT.EMISSAO BETWEEN :data1 and :data2)
	AND FT.STATUS='P'
GROUP BY
	FT.vendedor,VD.NOME,FT.OPERACAO,FO.DESCRICAO
ORDER BY
	VD.NOME

para indicar algo dinâmico é preciso saber qual o banco de dados utilizado.
GOSTEI 0
Gilson Silva

Gilson Silva

19/07/2020

Boa tarde Emerson! esqueci de mencionar o banco que trabalho. É FIREBIRD 2.5
GOSTEI 0
Gilson Silva

Gilson Silva

19/07/2020

Bom dia! Emerson fiz somente um ajuste no script e fiou do jeito que eu queria. Muito obrigado a todos.

SELECT
FT.vendedor,VD.NOME,
SUM(CASE WHEN OPERACAO=01 THEN LIQUIDO ELSE 0 END) DINHEIRO,
SUM(CASE WHEN OPERACAO=02 THEN LIQUIDO ELSE 0 END) PRAZO,
SUM(CASE WHEN OPERACAO=03 THEN LIQUIDO ELSE 0 END) CHEQUEAV,
SUM(CASE WHEN OPERACAO=04 THEN LIQUIDO ELSE 0 END) CHEQUEAP,
SUM(CASE WHEN OPERACAO=05 THEN LIQUIDO ELSE 0 END) CARTAO,
SUM(LIQUIDO) TOTAL
FROM
FATURAS FT
INNER JOIN
VENDEDOR VD ON VD.cod_ven = FT.vendedor
WHERE
(FT.EMISSAO BETWEEN :data1 and :data2)
AND FT.STATUS='P'
GROUP BY
FT.vendedor,VD.NOME
ORDER BY
VD.NOME
GOSTEI 0
POSTAR