Dúvida de SQL muito loco

SQL Server

SQL

MySQL

13/03/2019

Gostaria da ajuda de alguém que manja muito de SQL.
Tenho esse select abaixo, e asism, se for o tip = 1 ou 2 tem que dimiinuir o valor mas depois voltar a somar;
SELECT distinct
c.tip, c.VALOR
FROM
contamensalista c
WHERE
c.codmen = '000014'
AND c.data BETWEEN '2018-07-23' AND '2019-03-12'
AND c.codope IN ('D' , 'C')
AND c.sist IN ('F' , 'A', 'N', 'C')

eu obtive esse resultado:
3 48.28
3 694.52
1 1871.28
2 498.57
3 313.82
3 32.10
3 360.84

alguém tem alguma ideia?
Fernando Wahl

Fernando Wahl

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

13/03/2019

qual o resultado esperado?
GOSTEI 0
Fernando Wahl

Fernando Wahl

13/03/2019

Boa tarde Emerson, o resultado não influencia muito, pois sempre troca os valores o que vai obedecer a regra seria o campo c.tip. por que tem que diminuir quando é 1 ou 2.

Obrigado pela ajuda.
GOSTEI 0
Alex Lekao

Alex Lekao

13/03/2019

Oi Fernando, boa tarde!!

Acho que o que o Emerson quer, eh que seja informado como deveria ser os cálculos, exemplo pratico de como deveria ficar.

Olhei os valores e não consegui identificar se qdo apareceu o 1 foi diminuído ou não, etc.

Dependendo da Situação, vc pode colocar um case when ou usar um outer apply com a situação especifica fazendo o tratamento do 1 ou 2 e so informando no resultado.

Mas precisaríamos evoluir mais no entendimento do que vc precisa.

Atenciosamente,
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

13/03/2019

você obteve esse resultado:
tip	VALOR
3	48.28
3	694.52
1	1871.28
2	498.57
3	313.82
3	32.10
3	360.84

e qual resultado deveria ter sido apresentado, com base naqueles dados?
GOSTEI 0
Alex Lekao

Alex Lekao

13/03/2019

Fernando,

Quando você esta dizendo que o campo C.TIPO sendo 1 ou 2 tem que subtrair o valor, o valor tem que ficar negativo, eh isso?

Caso seja isso, só consigo pensar que vc tem que usar o Case When.

No caso ficaria mais ou menos assim:

SELECT distinct
   c.tip, 
   case
      when c.tipo = 1 then -c.VALOR
      when c.tipo =2 then -c.valor
   else c.valor
   end as valor
FROM
contamensalista c
WHERE
   c.codmen = '000014'
   AND c.data BETWEEN '2018-07-23' AND '2019-03-12'
   AND c.codope IN ('D' , 'C')
   AND c.sist IN ('F' , 'A', 'N', 'C')


GOSTEI 0
POSTAR