Anuncio

Colapsar
No hay anuncio todavía.

Transponer filas en columnas SAP Bussines One Hana

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

  • 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?

  • #2
    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

    Comentario


    • #3
      Chuyin1928 pudiste resolverlo? me interesa este tema .

      Comentario


      • #4
        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.

        Comentario


        • #5
          Excelente! seguramente a más de uno le sirva.

          Comentario

          Trabajando...
          X