Relatório SQL de faturamento - devolução
29/12/2023
0
Estou fazendo um relatório de faturamento, com o seguinte comando:
Preciso do total de devolução de cada mês para abater no faturamento. O registro das devoluções e o faturamento ficam na mesma tabela, sendo diferenciadas através da CFOP de devolução 1201 e 2201.
No caso desse comando, como encontro o total de devolução, para depois abater no faturamento ?
Tentei usar o case when para somar os valores caso a CFOP seja 1201 e 2201, mas acabou atrapalhando no agrupamento (ano/mes)
Select YEAR (T.DATA) ANO, CHOOSE (month (t.data), 'JAN', 'FEV', 'MAR', 'ABR','MAI', 'JUN', 'JUL', 'AGO', 'SET', 'OUT', 'NOV', 'DEZ') AS MES, ROUND (SUM (o.TOTALITEM - o.VLRDESCICMSIS - O.VLRDESC),2) 'FATURAMENTO', 'DEVOLUÇÃO', 'FATURAMENTO LIQUIDO', ROUND (SUM (s.CUSTOMEDIO * o.QTDADE),2) 'CPV', ROUND (SUM((o.TOTALITEM - o.VLRDESCICMSIS - O.VLRDESC) - (s.CUSTOMEDIO * o.QTDADE)),2) 'LUCRO', ROUND (SUM((o.TOTALITEM - o.VLRDESCICMSIS - O.VLRDESC) - (s.CUSTOMEDIO * o.QTDADE)) / SUM (o.TOTALITEM - o.VLRDESCICMSIS - O.VLRDESC),4) * 100 '% MARGEM BRUTA', ROUND (SUM((o.QTDADE * u.EQUIVALENCIA)/1000),3) 'TONELADAS', ROUND (SUM ((o.TOTALITEM - o.VLRDESCICMSIS - O.VLRDESC)) / SUM ((o.QTDADE * u.EQUIVALENCIA)/1000),3) 'TICKET MEDIO', ROUND (SUM (O.FRETENULO),2) 'FRETE NULO' From TRANSACAO T inner join ORDTRANS O on T.CODTRANSACAO=O.CODTRANSACAO inner join ORDSALDO S on s.CODORDTRANS=o.CODORDTRANS inner join PRODUTO P on o.codprod=p.CODPROD inner join UNIDADE U on u.CODUNID=p.CODUNID where t.DATA between '01/01/2022' and '31/12/2022' AND t.SITUACAO=3 AND o.CODNATU in ('1201','2201','5101', '5101A', '5101C', '5101P', '5102','5116', '5124','5125', '6101P','6116') GROUP BY Year(t.DATA), MONTH (t.DATA) ORDER BY Year(t.DATA), MONTH (t.DATA)
Preciso do total de devolução de cada mês para abater no faturamento. O registro das devoluções e o faturamento ficam na mesma tabela, sendo diferenciadas através da CFOP de devolução 1201 e 2201.
No caso desse comando, como encontro o total de devolução, para depois abater no faturamento ?
Tentei usar o case when para somar os valores caso a CFOP seja 1201 e 2201, mas acabou atrapalhando no agrupamento (ano/mes)
Mylena
Curtir tópico
+ 0
Responder
Posts
29/12/2023
Arthur Heinrich
Ao fazer o sum(), você pode colocar uma condição:
sum( case when o.CODNATU in ('1201','2201') then -valor else valor end )
Desta forma, o que não é cancelamento é somado e o que é cancelamento é subtraído.
sum( case when o.CODNATU in ('1201','2201') then -valor else valor end )
Desta forma, o que não é cancelamento é somado e o que é cancelamento é subtraído.
Responder
Clique aqui para fazer login e interagir na Comunidade :)