Anuncio

Colapsar
No hay anuncio todavía.

problema SELECT registros repetidos

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

  • problema SELECT registros repetidos

    Mi codigo:

    Código:
    SELECT
        ekbe~budat
        ekbe~vgabe
        ekbe~ebeln
        ekbe~ebelp
        ekbe~zekkn
        ekbe~gjahr
        ekbe~belnr
        ekbe~buzei
        covp~kokrs
        covp~belnr
        covp~refbz
        covp~wtgbtr
        covp~twaer
        ekko~lifnr
        lfa1~name1
        prps~pspnr
        rbkp~belnr
        rbkp~budat
        rbkp~zfbdt
        ekbe~arewr
        ekbe~waers
        covp~gkont
        covp~stokz
        ekkn~sakto
        skat~txt20
        skat~txt50
        ekkn~vproz
        ekkn~kostl
        ekkn~ps_psp_pnr
        ekpo~konnr
        ekpo~ktpnr
        ekpo~banfn
        ekpo~bnfpo
        covp~buzei
        ekpo~knttp
        ekpo~vrtkz
        ekpo~twrkz
        ekkn~menge
        ekpo~meins
        ekkn~xbkst
        ekkn~xbauf
        ekkn~xbpro
        ekkn~fipos
        covp~gjahr
        covp~perio
        covp~budat
        ekbe~shkzg
        rbkp~xblnr
        covp~kstar
    
        FROM ekko
        INNER JOIN ekpo
        ON ekko~ebeln = ekpo~ebeln
        INNER JOIN ekkn
        ON ekpo~ebeln = ekkn~ebeln
        AND ekpo~ebelp = ekkn~ebelp
        INNER JOIN ekbe
        ON ekkn~ebeln = ekbe~ebeln
        AND ekkn~ebelp = ekbe~ebelp
        LEFT OUTER JOIN covp
        ON ekbe~ebeln = covp~ebeln
        AND ekbe~ebelp = covp~ebelp
        AND ekbe~zekkn = covp~zekkn
        AND ekbe~gjahr = covp~gjahr
        AND ekbe~belnr = covp~refbn
        INNER JOIN prps
        ON covp~objnr = prps~objnr
        LEFT OUTER JOIN rbkp
        ON ekbe~gjahr = rbkp~gjahr
        AND ekbe~belnr = rbkp~belnr
        INNER JOIN skat
        ON ekkn~sakto = skat~saknr
        INNER JOIN lfa1
        ON ekko~lifnr = lfa1~lifnr
        INTO TABLE gt_output
        WHERE
        ekbe~budat IN p_budat.
    El problema es que la consulta tira 5 registros iguales, cuando segun mi tabla EKBE deberia tirar 3 registros diferentes...

  • #2
    Hola,

    pero ahí tienes inner join y left outer join por todos lados, jaja, deberías realizar el seguimiento paso a paso para ver que debería traerte, no solo guiarte por esa tabla.

    Comentario


    • #3
      mejora codigo

      ahi ordene un poco el codigo:

      Código:
      SELECT
          ekko~lifnr
          ekpo~konnr
          ekpo~ktpnr
          ekpo~banfn
          ekpo~bnfpo
          ekpo~knttp
          ekpo~vrtkz
          ekpo~twrkz
          ekpo~meins
          ekkn~vproz
          ekkn~kostl
          ekkn~ps_psp_pnr
          ekkn~menge
           ekkn~xbkst
          ekkn~xbauf
          ekkn~xbpro
          ekkn~fipos
          ekkn~sakto
          ekbe~budat
          ekbe~vgabe
          ekbe~ebeln
          ekbe~ebelp
          ekbe~zekkn
          ekbe~gjahr
          ekbe~belnr
          ekbe~buzei
          ekbe~arewr
          ekbe~waers
          ekbe~shkzg
          covp~kokrs
          covp~belnr
          covp~refbz
          covp~wtgbtr
          covp~twaer
          covp~gkont
          covp~stokz
          covp~buzei
          covp~gjahr
          covp~perio
          covp~budat
          covp~kstar
          prps~pspnr
          rbkp~belnr
          rbkp~budat
          rbkp~zfbdt
          rbkp~xblnr
          skat~txt20
          skat~txt50
          lfa1~name1
      
      
          FROM ekko
          INNER JOIN ekpo
          ON ekko~ebeln = ekpo~ebeln
          INNER JOIN ekkn
          ON ekpo~ebeln = ekkn~ebeln
          AND ekpo~ebelp = ekkn~ebelp
          INNER JOIN ekbe
          ON ekkn~ebeln = ekbe~ebeln
          AND ekkn~ebelp = ekbe~ebelp
          LEFT OUTER JOIN covp
          ON ekbe~ebeln = covp~ebeln
          AND ekbe~ebelp = covp~ebelp
          AND ekbe~zekkn = covp~zekkn
          AND ekbe~gjahr = covp~gjahr
          AND ekbe~belnr = covp~refbn
          INNER JOIN prps
          ON covp~objnr = prps~objnr
          LEFT OUTER JOIN rbkp
          ON ekbe~gjahr = rbkp~gjahr
          AND ekbe~belnr = rbkp~belnr
          INNER JOIN skat
          ON ekkn~sakto = skat~saknr
          INNER JOIN lfa1
          ON ekko~lifnr = lfa1~lifnr
          INTO TABLE gt_output
          WHERE
          ekbe~budat IN p_budat.
      La logica de a que tablas accede la hice mentalmente, e incluso la escribi:

      Código:
      Camino EBELN 4700000000
      
      EKBE -> EKPO -> EKKN -> COVP
      
      Camino OBJNR PR00001350
      
      COVP -> PRPS -> RBKP
      
      Camino GJAHR 0000
      
      EKBE -> RBKP
      
      Camino SAKTO 9003200500
      
      EKKN -> SKAT
      
      Camino LIFNR 0003308969
      
      EKKN -> LFA1
      La consulta la hice manualmente y encuentra las cosas, pero en el reporte sigue imprimiendo esos 5 registros repetidos...

      Comentario


      • #4
        No hagas un solo select con tantos inner joins y outer joins.

        Siempre es mucho mejor hacer los selects por separados, asi justamente vos a poder seguir el flujo de datos.

        Si queres uni algunos selects de tablas muy relacionadas, EKKO y EKPO por ejemplo, pero yo siempre prefiero usar FOR ALL ENTRIES en lugar de INNER JOIN.

        Ademas las tablas donde el where es por clave el acceso es inmediato. Por ejemplo la tabla LFA1. Esa tabla la podes poner tranquilamente dentro de un loop siempre y cuando accedas por LIFNR. Sin problemas.


        Hay gente que piesan que metiendo todo en un solo select es la mejor solucion y la mas performante, cuando no siempre es así.

        Saludos

        Comentario


        • #5
          Informacion...

          Creo que para poder saber cuál es tu problema hace falta el diagrama de entidad relación e identificar las llaves de las tablas...
          pero prueba utilizando el SELECT DISTINCT

          Comentario


          • #6
            revisando ...

            revisando esto último que pusiste
            La logica de a que tablas accede la hice mentalmente, e incluso la escribi:


            Código:
            Camino EBELN 4700000000

            EKBE -> EKPO -> EKKN -> COVP

            Camino OBJNR PR00001350

            COVP -> PRPS -> RBKP

            Camino GJAHR 0000

            EKBE -> RBKP

            Camino SAKTO 9003200500

            EKKN -> SKAT

            Camino LIFNR 0003308969

            EKKN -> LFA1


            (EKKN -> LFA1) .... NO EXISTE ESTA RELACION EN EL CODIGO.... LA TIENES COMO
            (EKKO -> LFA1)

            Comentario


            • #7
              Siempre es mas recomendable hacer las consultas separadas y luego consultar con FOR ALL ENTRIES, te recomiendo que agrupes tablas con INNER JOIN s estas son cabeza-detalle y llevándolas a una tabla interna, luego con esa tabla interna vas adentrando en los detalles, a parte de ser mas legible el código, es mas optimo ya que el INNER crea un producto 1-n de registros y es poco optimo para consultas tan extensas, la otra que podrías hacer es crear una vista con estas tablas, pero recuerda que las vistas son un INNER JOIN Implícito.

              Comentario

              Trabajando...
              X