Anuncio
Colapsar
No hay anuncio todavía.
Transponer filas en columnas SAP Bussines One Hana
Colapsar
X
-
Gracias por comentar amigos, lo que menciona Josemir podría funcionar si los meses fueran fijos, pero en mi caso, en cada ejecución varía la cantidad y los nombres de los meses. Se me ocurrió crear una variable String la cual inicialicé con la parte fija de la consulta y a la que voy concatenando (mediante un bucle) la parte de la consulta adicional que necesito, este bucle se ejecuta dependiendo de la cantidad de meses que tenga en la tabla y concatena a la variable String un select anidado en cada iteración,
Además, a la tabla de los meses agregué una columna adicional "MesNum" donde dependiendo del nombre del mes, guardo el número, ejem: Junio = 6
--Declaro la variable String
DECLARE CONSULTA STRING:='SELECT T0."ID",T0."Fecha",T0."Articulo"';
--Declaro la variable mes
DECLARE MES INT Default 0;
--Obtengo la fecha de la factura más antigua del cliente
SELECT TOP 1 TO_DATE("DocDate") INTO FECHAINICIAL FROM OINV WHERE "CardCode" = :codigoCliente ORDER BY "DocDate" ASC;
SELECT EXTRACT_MONTH(FECHAINICIAL) INTO MES FROM DUMMY;
FOR CONT IN 1..TOTALDEMESES DO
--Concateno a la consulta, el select anidado que extrae los datos de la tabla de intereses
CONSULTA:=CONCAT(CONSULTA,',(SELECT T1."Interes" FROM TABLAINTERES T1 WHERE T1."ID" = T0."ID" AND T1."MesNum" = ');
--Aquí agrego el número del mes que me servirá para las condiciones del Where y encontrar las facturas del mes en cuestión
CONSULTA:=CONCAT(CONSULTA,MES);
--Aquí agrego 'AS' para usar un alias de columna, dependiendo del número del mes
CONSULTA:=CONCAT(CONSULTA,') AS ');
--Ahora obtengo el nombre del mes de otra tabla, dependiendo del número que le corresponda, si el número es 6 me guardará Junio y lo concateno a la consulta
SELECT "Name" INTO MesName FROM LMPERIODOSINT WHERE "Cont" = CONT;
CONSULTA:=CONCAT(CONSULTA,MesName);
MES:=MES+1;
END FOR;
--Esta parte es para completar el select
CONSULTA:=CONCAT(CONSULTA,' FROM LMFACTURASINTERES T0');
--Result es un parámetro OutPut del stored procedure que me devolverá la consulta que necesito
RESULT = CONSULTA;
Eso me devuelve una cadena con una consulta como la siguiente:
Out(1)
SELECT T0."Date",T0."ItemCode",(SELECT T1."Interes" FROM LMCALCULOINTERES T1 WHERE T1."ID" = T0."ID" AND T1."MesNum" = 6) AS Junio,(SELECT T1."Interes" FROM LMCALCULOINTERES T1 WHERE T1."ID" = T0."ID" AND T1."MesNum" = 7) AS Julio,(SELECT T1."Interes" FROM LMCALCULOINTERES T1 WHERE T1."ID" = T0."ID" AND T1."MesNum" = 8) AS Agosto FROM LMFACTURASINTERES T0
La cual, se modifica dependiendo de cuantos y cuales meses tenga en mi tabla.
Todo esto, lo tengo dentro de un Stored Procedure, en el que están todas las declaraciones de las variables y otras operaciones, etc, este procedimiento me devuelve la cadena de la consulta y esto lo ejecuto desde SAP en el Query Manager así:
/* select from "OCRD" T0 */
Declare ClienteF VARCHAR(20);
Declare Consulta STRING;
ClienteF := /* T0."CardCode" */ '[%0]';
CALL LM_EDOCTA(ClienteF,Consulta);
EXECUTE IMMEDIATE CONSULTA;
Lo cual, me devuelve un resultado como el siguiente:
Folio Date ItemCode JUNIO JULIO AGOSTO
4876 05/06/2019 INS0057 30.00 31.00 16.00
140112 15/06/2019 HER0013 60.00 62.00 32.00
140112 15/06/2019 HER0014 90.00 93.00 48.00
140112 15/06/2019 HER0027 120.00 124.00 64.00
140112 15/06/2019 HER0068 150.00 155.00 80.00
140170 17/06/2019 MEZ0002 180.00 186.00 96.00
140526 03/07/2019 INS0005 0.00 0.00 0.00
140526 03/07/2019 FOL0022 0.00 0.00 0.00
140526 03/07/2019 FOL0103 0.00 0.00 0.00
Espero haberme explicado bien y ojalá les sirva de algo.
Quedo atento.
¡Saludos!
PD: Puede que los nombres de los campos en mi consulta no sean los mismos que usé en el post original, ya que lo simplifiqué para ser más práctico.
- le gusta 1
Dejar un comentario:
-
Hola!
Probaría con algo así:
Código:SELECT tabla1.ID , FECHA ARTICULO ,(case tabla1.mes = 'Junio' then Interés) as Junio , (case tabla1.mes = 'Junio' then Interés) as Julio from tabla 1 inner join tabla2 on (tabla1.id = tabla2.id)
Dejar un comentario:
-
Transponer filas en columnas SAP Bussines One Hana
Hola, les saludo con gusto.
Actualmente tengo una tabla con datos del cálculo de intereses, algo así:
Y otra tabla con la información de las facturas:ID Mes Interes 12F05 Junio 30.2 12F05 Julio 31 12F05 Agosto 32
ID Fecha Articulo 12F05 05/06/2019 Fer0001 12F06 05/06/2019 Fer0002
Busco obtener la siguiente salida al unir las dos tablas:ID Fecha Articulo Junio Julio Agosto 12F05 05/06/2019 Fer0001 30.2 31 32
Pero no se me ocurre nada para poder hacerlo así, ¿Alguien puede darme algún consejo o se le ocurre algo?
Dejar un comentario: