1

我有这个查询:

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.

有一个错误,我在子查询中不能有超过 1 个字段。

我知道我可以对所有条目进行 2 个查询。但我正在寻找是否有可能,在 1 个查询中只有双、三等记录。

这可能吗?

4

1 回答 1

3

有一个EXISTS子查询来限定您要选择的行。它不会将行或列添加到结果集中。

将子查询子句中的列列表减少SELECT到任何一个列,甚至是文字 - 例如SELECT 1- 你会得到你的重复项:

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.
于 2020-10-10T20:10:04.317 回答