Sentencia collect

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • stormshadow
    Senior Member
    • jun
    • 117

    #1

    Sentencia collect

    Buen dia foro, bueno pues me gustaría saber si alguién me podría explicar como se usa esta sentencia, el collect, lo que pasa es que necesito sumar unas cantidades de una tabla interna, y le he intentado de varias maneras y no me suma
    Bueno pues desde ya muchas gracias.
    "Si quieres resultados distintos, no hagas siempre lo mismo" .... Einstein
  • zonanet
    Senior Member
    • mar
    • 195

    #2
    puedes intentar de esta manera:

    loop at tabla_interna.
    collect tabla_interna.
    endloop.


    pero para que funcione tienes que tener en cuenta que la tabla interna tiene que estar ordenada y va a sumar SOLO los registros que tengan campos char iguales ejemplo

    casa 150 x
    casa 300 x
    casa 200 y

    te da como resultado
    casa 450 x
    casa 300 y


    espero que te sirva esta información.


    Saludos

    Comentario

    • stormshadow
      Senior Member
      • jun
      • 117

      #3
      si hermano si me sirvió, thanks, oye pero algo que ví es, debugueando la suma de el total de la columna que yo quiero, la hace en el primer indice, o sea va iterando mi tabla y toda la suma la va haciendo en el indice que te menciono, si yo quiziera sacarlo a otra variable, como lo podría hacer? o si quiziera sacar esa suma de que manera lo haría?
      "Si quieres resultados distintos, no hagas siempre lo mismo" .... Einstein

      Comentario

      • zonanet
        Senior Member
        • mar
        • 195

        #4
        puede ser algo así:

        loop at tabla_interna into work_area.
        variable = varible + work_area-campo.
        endloop.

        variable2 = variable.
        free variable.


        lo que haces aquí es sumar el campo que quieres y pasarlo a otra variable, lo del free es porque cada vez que se ejecute ese loop (por un enter por ejemplo) te lo incrementa, así te aseguras de sólo obtener la suma de los registros que tiene tu tabla interna.

        Comentario

        • stormshadow
          Senior Member
          • jun
          • 117

          #5
          Pero a final de cuentas, allí ya no entra el collect o si? eso ya sería como un contador o no? lo que pasa es que no quiero utilizar un contador
          "Si quieres resultados distintos, no hagas siempre lo mismo" .... Einstein

          Comentario

          • Belerophonte
            Junior Member
            • mar
            • 11

            #6
            Collect

            El collect funciona no con un campo "clave", pero debes tener la precaucion de:

            - poner todos los campos "clave" los primeros de la tabla interna, p ej: el nº de factura, la fecha, etc y los ultimos campos de la tabla interna sería los campos a sumarizar.

            - hacer un sort de la tabla interna antes de recorrerla y hacer el collect. debes ordenar los registros de la tabla interna con el mismo patron que quieras que luego te sumarize los campos.

            es muy engorroso y muy caprichoso, si te sirve podrias sumarizar desde el SELECT con la sentencia SUM al pasarlo a tu tabla interna


            SELECT CONNID COUNT( * ) SUM( LUGGWEIGHT )
            INTO (CONNID, COUNT, SUM)
            FROM SBOOK
            WHERE
            CARRID = 'LH ' AND
            FLDATE = '19950228'
            GROUP BY CONNID.
            WRITE: / CONNID, COUNT, SUM, AVG.
            ENDSELECT.

            Suerte!!!

            Comentario

            • stormshadow
              Senior Member
              • jun
              • 117

              #7
              Belerophonte gracias por contestar, y pues no puedo hacer el select sum ya que estoy sacando mi info de una tabla interna, por eso recurro al collect, pero ya casí lo tengo listo, lo único extraño que encuentro es que, cuando comienza a contar mis cantidades siempre suma uno de mas a que se deberá?

              Código:
              LOOP AT it_auxiliar.
                collect it_auxiliar.
              ENDLOOP.
              solo la loopeo y comienzo a hacer el collect, me hace la suma en mi header line, pero siempre siempre suma uno de mas y mi tabla ya está ordenada
              "Si quieres resultados distintos, no hagas siempre lo mismo" .... Einstein

              Comentario

              • dpalavecino
                Junior Member
                • abr
                • 14

                #8
                Buenas, queria saber si al final pudiste solucionar el problema, ya que a mi me pasa lo mismo y no encuentro la manera de solucionarlo.
                Muchas Gracias.
                Saludos.

                Demian M. Palavecino
                Buenos Aires -- Argentina

                Comentario

                • stormshadow
                  Senior Member
                  • jun
                  • 117

                  #9
                  Al parecer me compliqué mucho la manera en que usé el comando, pero deja te digo que fué lo que hize:
                  Primero ordené la tabla interna que voy a loopear, y me cree otra tabla auxiliar con la misma estructura de esta misma, solamente hago un loop a mi tabla interna y pongo collect it_mitabla INTO it_mitablaauxiliar y listo, en cada vuelta va haciendo la suma pero en mi tabla auxiliar y listo, al final te queda la suma en la auxiliar para que puedas manipular tus datos, eso fué como lo resolví te reitero que creo que hay otra manera para hacerlo con menos lineas aunque en realidad esto solo m ocupó un loop de más y crear otra tabla auxiliar, pero igual fué una solución, espero te sirva.
                  Salu2
                  "Si quieres resultados distintos, no hagas siempre lo mismo" .... Einstein

                  Comentario

                  • dpalavecino
                    Junior Member
                    • abr
                    • 14

                    #10
                    Sentencia Collect

                    Muchisimas Gracias, ahora lo pruebo y te cuendo.
                    Saludos!!!!

                    Ahi lo Probe, que perfecto muchas gracias por tu ayuda, la verdad "10" Puntos.
                    Saludos.
                    Editado por última vez por dpalavecino; 24/07/2009, 17:52:57.

                    Comentario

                    • Kope
                      Member
                      • abr
                      • 79

                      #11
                      No tienes que loopear para poner el código, con solo poner Collect itab alcanza.

                      Saludos!
                      SAP HANA consultant

                      Comentario

                      Trabajando...