仅查找 listagg 中的重复值
find only the duplicate values in listagg
我的 table 中有一些重复的行。我想找到那些重复项。
在列 rp_num 上完成 listagg 之后,我的 table 将具有这样的重复值:
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;
我只想 select rp_num_group 中的那些重复值(在 rp_num 列的 listagg 之后)。
我尝试对 listagg 使用 count(*) 但它不起作用。
我只想select下面提到的那些值:
您可以使用 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
您可以使用如下解析函数:
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;
我的 table 中有一些重复的行。我想找到那些重复项。
在列 rp_num 上完成 listagg 之后,我的 table 将具有这样的重复值:
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;
我只想 select rp_num_group 中的那些重复值(在 rp_num 列的 listagg 之后)。 我尝试对 listagg 使用 count(*) 但它不起作用。
我只想select下面提到的那些值:
您可以使用 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
您可以使用如下解析函数:
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;