Relatório SQL de faturamento - devolução

SQL Server

SQL

Banco de Dados

29/12/2023

Estou fazendo um relatório de faturamento, com o seguinte comando:

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

Mylena

Curtidas 0

Respostas

Arthur Heinrich

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.
GOSTEI 0
POSTAR