La query SQL esiste e conta per molti campi nella sottoquery

Oct 09 2020

Ho questa domanda:

SELECT *
FROM j_1gvl_ml AS jml
WHERE sptag IN @s_sptag AND
      bukrs = @p_bukrs AND
      werks IN @s_werks AND
      matnr IN @s_matnr AND
      tract IN @s_tract AND
      erdat IN @s_erdat AND
      repid = @p_repid AND
      EXISTS ( SELECT vrsio,whbcode,bukrs,belnr,buzei,
                      werks,locat,matnr,bwtar,orgn, COUNT( * )
                FROM j_1gvl_ml
                WHERE vrsio = jml~vrsio AND
                      sptag = jml~sptag AND
                      whbcode = jml~whbcode AND
                      bukrs = jml~bukrs AND
                      belnr = jml~belnr AND
                      buzei = jml~buzei AND
                      werks = jml~werks AND
                      locat = jml~locat AND
                      matnr = jml~matnr AND
                      bwtar = jml~bwtar AND
                      orgn = jml~orgn
                GROUP BY vrsio,whbcode,bukrs,belnr,buzei,
                      werks,locat,matnr,bwtar,orgn
                HAVING COUNT( * ) > 1  )
  INTO TABLE @itj_1gvl_ml.

C'è un errore che non posso avere più di 1 campo nella sottoquery.

So che posso avere 2 domande per tutte le voci. Ma sto cercando se è possibile, avere in 1 query per avere solo i record doppi, tripli ecc.

È possibile?

Risposte

3 Florian Oct 11 2020 at 03:10

Una EXISTSsottoquery è lì per qualificare le righe che si desidera selezionare. Non aggiunge righe o colonne al set di risultati.

Riduci l'elenco di colonne nella SELECTclausola della tua sottoquery a una qualsiasi delle colonne, o anche a un valore letterale, come ad esempio SELECT 1, e otterrai i tuoi duplicati:

SELECT *
  FROM j_1gvl_ml AS jml
  WHERE sptag IN @s_sptag AND
        bukrs = @p_bukrs AND
        werks IN @s_werks AND
        matnr IN @s_matnr AND
        tract IN @s_tract AND
        erdat IN @s_erdat AND
        repid = @p_repid AND
        EXISTS ( SELECT belnr
                  FROM j_1gvl_ml
                  WHERE vrsio = jml~vrsio AND
                        sptag = jml~sptag AND
                        whbcode = jml~whbcode AND
                        bukrs = jml~bukrs AND
                        belnr = jml~belnr AND
                        buzei = jml~buzei AND
                        werks = jml~werks AND
                        locat = jml~locat AND
                        matnr = jml~matnr AND
                        bwtar = jml~bwtar AND
                        orgn = jml~orgn
                  GROUP BY vrsio,whbcode,bukrs,belnr,buzei,
                        werks,locat,matnr,bwtar,orgn
                  HAVING COUNT( * ) > 1  )
    INTO TABLE @itj_1gvl_ml.