仅在listag中查找重复的值

wfveoks0  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(479)

我的表中有一些重复的行。我想找到那些复制品。

在对列rp\u num执行listag之后,我的表将有如下重复值:

SELECT distinct vt.vsd_id, vt.rn,vt.rp_id,
 LISTAGG(vt.rp_num,' ') WITHIN GROUP (ORDER BY Nlssort(vt.rp_num, 'NLS_SORT=BINARY_CI')) 
                  over (PARTITION BY vt.vsd_id, vt.rn,vt.rp_id ) vp_num_gruppe 
             FROM   vechicle_datatype vt
            where vt.vsd_id = 37897;


我只想在rp\u num\u组中选择那些重复的值(在rp\u num列的listag之后)。我尝试对listag使用count(*),但它不起作用。
我只想选择下面提到的那些值:

gpnt7bae

gpnt7bae1#

可以按如下方式使用分析函数:

SELECT * FROM 
(SELECT T.*, 
        COUNT(1) OVER (PARTITION BY VT.VSD_ID, VT.RN, VP_NUM_GRUPPE) AS CNT
   FROM (SELECT VT.VSD_ID, VT.RN, VT.RP_ID,
                LISTAGG(VT.RP_NUM,' ') WITHIN GROUP(
                   ORDER BY NLSSORT(VT.RP_NUM,'NLS_SORT=BINARY_CI')) AS VP_NUM_GRUPPE
           FROM VECHICLE_DATATYPE VT
          WHERE VT.VSD_ID = 37897
       GROUP BY VT.VSD_ID, VT.RN, VT.RP_ID)T )
 WHERE CNT > 1;
6rqinv9w

6rqinv9w2#

您可以使用 listagg() ,并使用 having 条款:

SELECT 
    vsd_id, 
    rn,
    rp_id,
    LISTAGG(rp_num,' ') WITHIN GROUP (ORDER BY Nlssort(rp_num, 'NLS_SORT=BINARY_CI')) vp_num_gruppe 
FROM  vechicle_datatype vt
WHERE vt.vsd_id = 37897
GROUP BY vsd_id, rn, rp_id
HAVING COUNT(*) > 1

相关问题