Fórum Relatório SQL de faturamento - devolução #620894
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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)