Anuncio

Colapsar
No hay anuncio todavía.

Transponer filas en columnas SAP Bussines One Hana

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Josemir
    respondió
    Excelente! seguramente a más de uno le sirva.

    Dejar un comentario:


  • Chuyin1928
    respondió
    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.

    Dejar un comentario:


  • juanma
    respondió
    Chuyin1928 pudiste resolverlo? me interesa este tema .

    Dejar un comentario:


  • Josemir
    respondió
    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)
    Quizás eso te ayude a darte una idea

    Dejar un comentario:


  • Chuyin1928
    comenzado un tema Transponer filas en columnas SAP Bussines One Hana

    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í:

    ID Mes Interes
    12F05 Junio 30.2
    12F05 Julio 31
    12F05 Agosto 32
    Y otra tabla con la información de las facturas:
    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?
Trabajando...
X