°Experimente isso, cumprimentos!
SELECT T1."SLength1" As "Campo Original",
CASE
WHEN Cast(T1."SLength1" As Integer) <> 0 THEN Cast(T1."SLength1" As Integer)
ELSE ''
END As "Inteiro"
FROM SBOINMEPRODB .dbo.oitm T1 WHERE T1."SLength1" <> 0
Avalados por :
Bom dia,
Estou com um pequeno problema ao criar um CASE que uso para exibir um número dependendo do valor de um campo original. A tarefa é mostrar as medidas de um item expressas em fração, mas no SAP BO não é possível inserir outro formato que não seja decimal.
Portanto, pensei em separar a parte inteira de um número para depois concatená-la com sua parte decimal no formato de fração. O objetivo é converter "1.5" em "1 1/2" ou "1.25" em "1 1/4". Sendo iniciante (ou melhor, afastado da programação por muito tempo), gostaria de saber se há uma maneira mais simples de alcançar esse propósito.
A conversão é feita em duas partes, sendo a primeira a parte inteira, onde apenas a parte decimal é removida sem arredondamento, então não é possível usar Round. Se for menor que zero, não será exibido, pois ao expressar meio polegada, é feito como "1/2", portanto "0 1/2" estaria incorreto. Este é o query da primeira parte:
SELECT T1."SLength1" Como "Campo Original",
CASE
QUANDO Cast(T1."SLength1" Como Inteiro) <> 0 ENTÃO Cast(T1."SLength1" Como Inteiro)
FIM Como "Inteiro"
DE "SBOINMEPRODB"."OITM" T1 ONDE T1."SLength1" <> 0
Nesta consulta, nada é exibido se a parte inteira for menor que 0, o que é o que eu preciso, mas ao concatená-lo com a parte decimal, nada é exibido, independentemente de haver uma parte decimal nos primeiros registros.
Portanto, adicionei um ELSE à query da seguinte forma:
SELECT T1."SLength1" Como "Campo Original",
CASE
QUANDO Cast(T1."SLength1" Como Inteiro) <> 0 ENTÃO Cast(T1."SLength1" Como Inteiro)
SENÃO ''
FIM Como "Inteiro"
DE "SBOINMEPRODB"."OITM" T1 ONDE T1."SLength1" <> 0
Ao executá-lo, é exibido o seguinte erro:
Se alguém puder me indicar como resolver o erro com o ELSE do CASE ou uma maneira mais fácil de converter um "1.5" em "1 1/2", ficaria muito grato.
Saudações,
Alejandro Soto.
°Experimente isso, cumprimentos!
SELECT T1."SLength1" As "Campo Original",
CASE
WHEN Cast(T1."SLength1" As Integer) <> 0 THEN Cast(T1."SLength1" As Integer)
ELSE ''
END As "Inteiro"
FROM SBOINMEPRODB .dbo.oitm T1 WHERE T1."SLength1" <> 0
Olá!
Aqui está um exemplo que pode te ajudar:
DATA: ls_vbak TYPE vbak,
ld_vbeln LIKE vbak-vbeln.
PARAMETERS: p_vbeln like vbak-vbeln.
CONSTANTS: lc_name1(5) TYPE c VALUE 'name1',
lc_name2(5) TYPE c VALUE 'name2',
lc_name3(5) TYPE c VALUE 'name3'.
ld_vbeln = p_vbeln.
SELECT vbeln, vbtyp,
CASE
WHEN auart = 'ZAMA' THEN @lc_name1
WHEN auart = 'ZACR' THEN @lc_name2
ELSE @lc_name3
END AS ernam
FROM vbak
WHERE vbeln = @ld_vbeln
INTO CORRESPONDING FIELDS of @ls_vbak.
ENDSELECT.
SELECT vbeln, vbtyp,
CASE
WHEN auart = 'ZAMA' THEN @lc_name1
WHEN auart = 'ZACR' THEN @lc_name2
ELSE @lc_name3
END AS ernam
FROM vbak
WHERE vbeln = @ld_vbeln
INTO CORRESPONDING FIELDS of @ls_vbak.
ENDSELECT
Este conceito é explicado em detalhes no seguinte link:
https://abap.ar/declaraciones-case-en-consultas-open-sql-usando-abap-7-4/
Saudações
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute