Anuncio

Colapsar
No hay anuncio todavía.

Suma por varios campos iguales

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

  • Suma por varios campos iguales

    sEÑORES TENGO EL SIGUIENTE DILEMA, LA TABLA SIGUIENTE
    TABLA VIRGEN

    Campo1 | Campo2 | Campo3 | Campo4
    -----------------------------------------------------
    AAA | G111 | SSS1 | 1.20
    AAA | G111 | SSS1 | 2.30
    AAA | G111 | SSS1 | 1.50
    AAA | H555 | SSS1 | 1.30
    BBB | F333 | GG1 | 1.80
    BBB | F333 | GG1 | 1.40
    BBB | F333 | GG1 | 1.60
    CCC | R444 | KK2 | 1.30
    CCC | R444 | KK2 | 1.70
    CCC | R444 | KK2 | 1.60
    CCC | R444 | KK2 | 2.30


    lo que quiero es que se sume el Campo4, mientras el Campo1, el Campo2 y el Campo3 sean iguales; es decir tiene que resultar lo siguiente

    TABLA PROCESADA - RESULTADO

    Campo1 | Campo2 | Campo3 | Campo4
    -------------------------------------------------------
    AAA | G111 | SSS1 | 5.00
    AAA | H555 | SSS1 | 1.30
    BBB | F333 | GGG1 | 4.80
    CCC | R444 | KK2 | 6.90

    he hecho el loop siguiente:

    Código:
       LOOP AT gtd_TABLA0 ASSIGNING <fs_TABLA0>.
          AT FIRST.ENDAT.
            AT NEW CAMPO1.
              WA_1-CAMPO1   = < fs_TABLA0>-CAMPO1.
            ENDAT.
            AT NEW CAMPO2.
              WA_1-CAMPO2   = < fs_TABLA0>-CAMPO2.
            ENDAT.
            AT NEW CAMPO3.
              WA_1-CAMPO3   = < fs_TABLA0>-CAMPO3.
            ENDAT.
    
              SUMAT = SUMAT + < fs_TABLA0>-CAMPO4.
    
            AT END OF CAMPO3. ENDAT.
            AT END OF CAMPO2. ENDAT.
            AT END OF CAMPO1. ENDAT.
           AT LAST.
             WA_1-CAMPO4   = SUMAT.
             APPEND WA_1 TO GTD_TRESULTADO.
             CLEAR SUMAT.
           ENDAT.
        ENDLOOP.
    Pero no funciona, luego hice esto:

    Código:
        gtd_TABLA0 = gtd_TABLA0.
        gtd_TABLA1 = gtd_TABLA0.
        gtd_TABLA2 = gtd_TABLA0.
        gtd_TABLA3 = gtd_TABLA0.
    
        SORT gtd_TABLA0 BY CAMPO1 CAMPO2 CAMPO3.
        SORT gtd_TABLA1 BY CAMPO1 CAMPO2 CAMPO3.
        SORT gtd_TABLA2 BY CAMPO1 CAMPO2 CAMPO3.
        SORT gtd_TABLA3 BY CAMPO1 CAMPO2 CAMPO3.
    
      LOOP AT gtd_TABLA0 ASSIGNING < fs_TABLA0>.
        LOOP AT gtd_TABLA1 ASSIGNING < fs_TABLA1> WHERE CAMPO1 = < fs_TABLA0>-CAMPO1.
          LOOP AT gtd_TABLA1 ASSIGNING < fs_TABLA2> WHERE CAMPO2 = < fs_TABLA1>-CAMPO2.
            LOOP AT gtd_TABLA1 ASSIGNING < fs_TABLA3> WHERE CAMPO3 = < fs_TABLA2>-CAMPO3.
              SUMAT_1 = SUMAT_1 + < fs_TABLA3>-CAMPO4.
            ENDLOOP.
            WA_1-BUKRS  = < fs_TABLA3>-BUKRS.
            WA_1-CAMPO1   = < fs_TABLA3>-CAMPO1.
            WA_1-CAMPO2   = < fs_TABLA3>-CAMPO2.
            WA_1-CAMPO3   = < fs_TABLA3>-CAMPO3.
            WA_1-CAMPO4   = SUMAT.
            CLEAR SUMAT.
            APPEND WA_1 TO GTD_TRESULTADO.
          ENDLOOP.
        ENDLOOP.
      ENDLOOP.
    Espero puedan ayudarme.

    Saludos cordiales.
    Editado por última vez por JoNhNaTaN; 08/08/2013, 21:59:39.

  • #2
    No me he parado a revisar mucho el codigo, pero lo que quieres hacer creo que es para lo que se invento la instrucción COLLECT. Echa un vistado a la ayuda de esta instruccion y busca ejemplos por ahi, creo que te va a servir.

    Un saludo.

    Comentario


    • #3
      Hola,

      es lo que menciona asystem, debes hacer un collect, pero previamente hacer un sort de tu tabla interna para luego hacer el collect.

      Esto significa hacer un sort por campo1 2 y 3 y finalmente un collect de esa tabla interna resultante.

      Cualquier cosa avísanos.

      Comentario

      Trabajando...
      X