SQL 查询存在并计算子查询中的许多字段

SQL query with exists and count for many fields in subquery

我有这个查询:

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 个查询中只包含双倍、三倍等记录。

这可能吗?

有一个 EXISTS 子查询来限定您想要 select 的行。它不会向结果集中添加行或列。

将子查询的 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.