¡Prueba este, saludos!
SELECT T1."SLength1" As "Campo Original",
CASE
WHEN Cast(T1."SLength1" As Integer) <> 0 THEN Cast(T1."SLength1" As Integer)
ELSE ''
END As "Entero"
FROM SBOINMEPRODB .dbo.oitm T1 WHERE T1."SLength1" <> 0
Avalados por :
Buenos días,
Tengo un ligero inconveniente al crear un CASE que utilizo para mostrar un número dependiendo del valor de un campo original. La tarea es mostrar las medidas de un artículo expresadas en fracción, pero en SAP BO no es posible ingresar otro formato que no sea decimal.
Por lo tanto, se me ocurre separar la parte entera de un número para luego concatenarla con su parte decimal en formato de fracción. El objetivo es convertir "1.5" en "1 1/2" o "1.25" en "1 1/4". Siendo principiante (más bien retirado de la programación por mucho tiempo), me gustaría saber si hay una manera más sencilla de lograr este propósito.
La conversión se realiza en dos partes, siendo la primera la parte entera, donde solo se elimina la parte decimal sin aproximarla, por lo que no se puede utilizar Round. Si es menor a cero, no se mostrará ya que al expresar media pulgada se hace como "1/2", por lo tanto "0 1/2" sería incorrecto. Este es el query de la primera parte:
SELECT T1."SLength1" Como "Campo Original",
CASE
CUANDO Cast(T1."SLength1" Como Entero) <> 0 ENTONCES Cast(T1."SLength1" Como Entero)
FIN Como "Entero"
DESDE "SBOINMEPRODB"."OITM" T1 DONDE T1."SLength1" <> 0
En esta consulta, no se muestra nada si la parte entera es menor que 0, que es lo que necesito, pero al concatenarlo con la parte decimal, no muestra nada, independientemente de que exista una parte decimal como en los primeros registros.
Por lo tanto, agregué un ELSE al query de la siguiente manera:
SELECT T1."SLength1" Como "Campo Original",
CASE
CUANDO Cast(T1."SLength1" Como Entero) <> 0 ENTONCES Cast(T1."SLength1" Como Entero)
SINO ''
FIN Como "Entero"
DESDE "SBOINMEPRODB"."OITM" T1 DONDE T1."SLength1" <> 0
Al ejecutarlo, muestra el siguiente error:
Si alguien pudiera indicarme cómo solucionar el error con el ELSE del CASE o una manera más fácil de convertir un "1.5" en "1 1/2", se lo agradecería mucho.
Saludos,
Alejandro Soto.
¡Prueba este, saludos!
SELECT T1."SLength1" As "Campo Original",
CASE
WHEN Cast(T1."SLength1" As Integer) <> 0 THEN Cast(T1."SLength1" As Integer)
ELSE ''
END As "Entero"
FROM SBOINMEPRODB .dbo.oitm T1 WHERE T1."SLength1" <> 0
Hola!
Te paso un ejemplo que te puede ayudar:
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
Se explica bien en el siguiente enlace:
https://abap.ar/declaraciones-case-en-consultas-open-sql-usando-abap-7-4/
Saludos
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute