cancel
Showing results for 
Search instead for 
Did you mean: 

Problemas de principiante con CASE - WHEN - ELSE

Former Member
0 Kudos

Buenos días,

Tengo un ligero inconveniente que al crear un CASE el cual estoy utilizando 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, como sabrán en SAP BO no es posible ingresar con otro formato más que el decimal.

Por lo que lo que se me ocurre es separar la parte entera de un número para luego concatenarla con su parte decimal en formato de fracción. El punto principal es convertir "1.5" en "1 1/2" ó "1.25" en "1 1/4". Como bien lo dice el título de la cadena soy principiante (más bien como retirado de la programación por mucho tiempo), por lo que quisiera saber si hay alguna manera más sencilla de cumplir el propósito de ésta consulta.

La conversión la hago en dos partes, siendo la primera la parte entera, para la cual únicamente debo eliminar la parte decimal sin aproximar la entera por lo que no es posible utilizar un Round. Si es menor a cero no me interesa mostrarla ya que al expresar media pulgada se hace de la siguiente manera "1/2", por lo tanto "0 1/2" sería incorrecto. Este es el query de la primera parte:


SELECT T1."SLength1" As "Campo Original",

CASE

WHEN Cast(T1."SLength1" As Integer) <> 0 THEN Cast(T1."SLength1" As Integer)

END As "Entero"

FROM "SBOINMEPRODB"."OITM" T1 WHERE T1."SLength1" <> 0

En ésta consulta no muestra nada si el entero es menor que 0, justamente lo que necesito, pero al concatenarlo con la parte decimal no muestra nada, sin importar que exista una parte decimal como en los primeros registros.

Por lo que agregué un ELSE quedando el query de la siguiente manera:

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"."OITM"  T1 WHERE T1."SLength1" <> 0

Al correrlo me muestra el siguiente error:

Si alguien pudiera iluminarme indicándome cómo solucionar el error con el ELSE del CASE o indicándome una manera más facil de convertir un "1.5" en "1 1/2", se los agradecería muchísimo.

Saludos,

Alejandro Soto.

Accepted Solutions (0)

Answers (2)

Answers (2)

elhichu2
Explorer
0 Kudos

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

Former Member
0 Kudos

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