Subtração com Resultados de Case

SQL

MySQL

29/05/2019

EU PRECISO SUBTRAIR OS VALORES DE IDAALMOCO E VOLTAALMOCO ASSIM (IDAALMOCO-VOLTAALMOCO), TEM COMO EU CRIAR UMA COLUNA COM O RESULTADO DESTA CONTA QUANDO AS DATAS (P8_DATA) FOREM AS MESMA, CADA DATA GERA UM IDAALMOCO E UM VOLTA ALMOCO


SELECT P8_MAT, RA_NOME, P8_DATA, P8_CC, CTT_DESC01,

CASE
WHEN P8_TPMARCA = '1S' THEN P8_HORA
END IDAALMOCO,

CASE
WHEN P8_TPMARCA = '2E' THEN P8_HORA
END VOLTAALMOCO

FROM SP8010 SP8

INNER JOIN SRA010 SRA ON SRA.RA_MAT = SP8.P8_MAT AND SRA.D_E_L_E_T_=''
INNER JOIN CTT010 CTT ON CTT.CTT_CUSTO = SP8.P8_CC AND CTT.D_E_L_E_T_=''
INNER JOIN SR6010 SR6 ON SR6.R6_TURNO = SRA.RA_TNOTRAB AND SR6.D_E_L_E_T_=''

WHERE SP8.D_E_L_E_T_=''
AND P8_TPMARCA IN ('1S', '2E')
Gustavo Jacob

Gustavo Jacob

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

31/05/2019

tente assim:
SELECT
	*, (VOLTAALMOCO - IDAALMOCO) ALMOCO
FROM
(SELECT
	P8_MAT, RA_NOME, P8_DATA, P8_CC, CTT_DESC01, 
	MAX(CASE WHEN P8_TPMARCA = '1E' THEN P8_HORA END) ENTRADA,
	MAX(CASE WHEN P8_TPMARCA = '1S' THEN P8_HORA END) IDAALMOCO,
	MAX(CASE WHEN P8_TPMARCA = '2E' THEN P8_HORA END) VOLTAALMOCO,
	MAX(CASE WHEN P8_TPMARCA = '2S' THEN P8_HORA END) SAIDA
FROM
	SP8010 SP8
INNER JOIN SRA010 SRA ON
	SRA.RA_MAT = SP8.P8_MAT AND SRA.D_E_L_E_T_=''
INNER JOIN CTT010 CTT ON
	CTT.CTT_CUSTO = SP8.P8_CC AND CTT.D_E_L_E_T_=''
INNER JOIN SR6010 SR6 ON
	SR6.R6_TURNO = SRA.RA_TNOTRAB AND SR6.D_E_L_E_T_=''
WHERE
	SP8.D_E_L_E_T_=''
	AND P8_TPMARCA IN ('1S', '2E')
GROUP BY
	P8_MAT, RA_NOME, P8_DATA, P8_CC, CTT_DESC01
) TAB
GOSTEI 1

Mais Respostas

Bruno Pardim

Bruno Pardim

29/05/2019

Você pode fazer isso num case tipo, você utiliza o case no lugar da coluna que você quer:

CASE WHEN P8_DATA = P8_DATA1 THEN IDAALMOCO - VOLTAALMOCO
ELSE 'BLABLABLA'
END As Calculo
GOSTEI 0
Gustavo Jacob

Gustavo Jacob

29/05/2019

Você pode fazer isso num case tipo, você utiliza o case no lugar da coluna que você quer:

CASE WHEN P8_DATA = P8_DATA1 THEN IDAALMOCO - VOLTAALMOCO
ELSE 'BLABLABLA'
END As Calculo


Ele entende o P8_DATA1, IDAALMOCO e o VOLTAALMOCO como campo inválido, pq não faz parte da tabela
GOSTEI 0
Gustavo Jacob

Gustavo Jacob

29/05/2019

tente assim:
SELECT
	*, (VOLTAALMOCO - IDAALMOCO) ALMOCO
FROM
(SELECT
	P8_MAT, RA_NOME, P8_DATA, P8_CC, CTT_DESC01, 
	MAX(CASE WHEN P8_TPMARCA = '1E' THEN P8_HORA END) ENTRADA,
	MAX(CASE WHEN P8_TPMARCA = '1S' THEN P8_HORA END) IDAALMOCO,
	MAX(CASE WHEN P8_TPMARCA = '2E' THEN P8_HORA END) VOLTAALMOCO,
	MAX(CASE WHEN P8_TPMARCA = '2S' THEN P8_HORA END) SAIDA
FROM
	SP8010 SP8
INNER JOIN SRA010 SRA ON
	SRA.RA_MAT = SP8.P8_MAT AND SRA.D_E_L_E_T_=''
INNER JOIN CTT010 CTT ON
	CTT.CTT_CUSTO = SP8.P8_CC AND CTT.D_E_L_E_T_=''
INNER JOIN SR6010 SR6 ON
	SR6.R6_TURNO = SRA.RA_TNOTRAB AND SR6.D_E_L_E_T_=''
WHERE
	SP8.D_E_L_E_T_=''
	AND P8_TPMARCA IN ('1S', '2E')
GROUP BY
	P8_MAT, RA_NOME, P8_DATA, P8_CC, CTT_DESC01
) TAB



Deu super certo, era exatamente o que eu precisava, muito obrigado mesmo pela ajuda!!
GOSTEI 0
POSTAR