排除LISTAGG中的重复项[重复]

问题描述 投票:0回答:1

我正在使用聚合函数 LISTAGG() 将多个匹配项放入单个单元格中,用逗号分隔。问题是,在某些行上,我得到了重复的值,例如

电流输出

Permit #        Inspection
B2023001        Air, Air, Air, Water
B2023002        Gas, Air, Gas
B2023003        Water, Water, Water

期望的输出

Permit #        Inspection
B2023001        Air, Water
B2023002        Gas, Air
B2023003        Water

查询

SELECT
    B1PERMIT.B1_ALT_ID AS "Permit #",
    LISTAGG( G6ACTION.G6_ACT_TYP, ', ' ) WITHIN GROUP ( ORDER BY G6ACTION.G6_ACT_TYP ) AS "Inspection"
FROM
    B1PERMIT B1PERMIT
INNER JOIN GPROCESS_HISTORY GPROCESS_HISTORY
    ON B1PERMIT.B1_PER_ID1 = GPROCESS_HISTORY.B1_PER_ID1
        AND B1PERMIT.B1_PER_ID3 = GPROCESS_HISTORY.B1_PER_ID3
INNER JOIN G6ACTION G6ACTION
    ON B1PERMIT.B1_PER_ID1 = G6ACTION.B1_PER_ID1
    AND B1PERMIT.B1_PER_ID3 = G6ACTION.B1_PER_ID3
    AND ( G6ACTION.G6_ACT_TYP LIKE '%Final%' AND G6ACTION.G6_STATUS = 'Approved' )

    GROUP BY B1PERMIT.B1_ALT_ID
    ORDER BY B1PERMIT.B1_ALT_ID DESC

我尝试使用 DISTINCT 但这不起作用,因为我的 Oracle 版本太旧 (12.1):

 LISTAGG( DISTINCT G6ACTION.G6_ACT_TYP, ', ' ) WITHIN GROUP ( ORDER BY G6ACTION.G6_ACT_TYP ) AS "Inspection"

除了在 LISTAGG() 中使用 DISTINCT,我还有什么其他选择?

sql oracle oracle12.1
1个回答
1
投票

您可以简单地在您的组密钥和 G6_ACT_TYPE 上获得一个 DISTINCT,并在外部查询块中执行 LISTAGG:

   SELECT B1_ALT_ID AS "Permit #",
          LISTAGG( G6_ACT_TYP, ', ' ) WITHIN GROUP ( ORDER BY G6_ACT_TYP ) AS "Inspection"
     FROM (SELECT DISTINCT
                  B1PERMIT.B1_ALT_ID,
                  G6_ACT_TYP
              FROM
                  B1PERMIT B1PERMIT
              INNER JOIN GPROCESS_HISTORY GPROCESS_HISTORY
                  ON B1PERMIT.B1_PER_ID1 = GPROCESS_HISTORY.B1_PER_ID1
                      AND B1PERMIT.B1_PER_ID3 = GPROCESS_HISTORY.B1_PER_ID3
              INNER JOIN G6ACTION G6ACTION
                  ON B1PERMIT.B1_PER_ID1 = G6ACTION.B1_PER_ID1
                  AND B1PERMIT.B1_PER_ID3 = G6ACTION.B1_PER_ID3
                  AND ( G6ACTION.G6_ACT_TYP LIKE '%Final%' AND G6ACTION.G6_STATUS = 'Approved' ))
    GROUP BY B1_ALT_ID
    ORDER BY B1_ALT_ID DESC
© www.soinside.com 2019 - 2024. All rights reserved.