Relatório SQL de faturamento - devolução
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
Curtidas 0
Respostas
Arthur Heinrich
29/12/2023
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.
GOSTEI 0