on 03-23-2015 6:00 PM
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.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
99 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.