【发布时间】:2016-02-03 22:13:53
【问题描述】:
我正在使用带有 RTRIM 和 REGEXP_REPLACE 的 LISTAGG 创建一个以逗号分隔的测试分数列表,但会删除重复项。
问题是仍然存在重复。
下面给出的数据直接来自 SORTEST 表。 (SELECT * FROM SORTEST WHERE SORTEST_PIDM = '260670') 我确实删除了我不使用的列。
Q1:为什么会有重复?
Q2:如何消除?
我认为这可能与有两组 A01-A05 分数有关。它只发生在具有一组以上 A 分数的人身上。这对我来说没有意义,因为我正在寻找像'A%B'这样的分数
代码:
SELECT DISTINCT
SP.SPRIDEN_ID AS "STUDENT_ID",
t2.sortest_pidm,
SP.SPRIDEN_LAST_NAME AS "LAST",
SP.SPRIDEN_FIRST_NAME AS "FIRST",
RTRIM(
REGEXP_REPLACE(
(
listagg ((T2.SORTEST_TESC_CODE || '-' || T2.SORTEST_TEST_SCORE), ', ')
WITHIN GROUP (ORDER BY SP.SPRIDEN_ID)
OVER (PARTITION BY SP.SPRIDEN_ID)),
'([^-]*)(-\1)+($|-)',
'\1\3'),
'-') TEST
FROM
SPRIDEN SP
left outer join SPBPERS B on SP.spriden_pidm = b.spbpers_pidm
JOIN SORTEST T2 ON T2.SORTEST_PIDM = SP.SPRIDEN_PIDM
WHERE
SP.SPRIDEN_CHANGE_IND IS NULL
AND B.SPBPERS_DEAD_IND IS NULL
AND B.SPBPERS_CONFID_IND <> 'Y'
AND T2.SORTEST_TADM_CODE IS NULL
AND
T2.SORTEST_TESC_CODE IN ('CM1B', 'CM2B', 'CR1B', 'CW1B', 'A01B', 'A02B', 'A03B', 'A04B',
'A05B', 'S01B', 'S02B', 'S95B', 'DSPW', 'DSPR', 'DSPM')
AND sP.spriden_change_ind is null
AND SP.SPRIDEN_ID IN ( 'A00154876')
数据
请注意 SORTEST_PIDM = SPIDEN_PIDM。我没有包含 SPRIDEN ID 或名称,因为我想简化数据部分。
结果:
+------------+--------------+--------+--------+--- ---------------------------------------------+ |学生 ID |排序_PIDM |上一页 |第一 |测试 | +------------+--------------+--------+--------+--- ---------------------------------------------+ | A00154876 | 260670 |福勒 |马丁 | A01B-22, A02B-19, A03B-21, A04B-23, A05B-21, | | | | | | DSPM-4、DSPR-4、DSPW-4、| | | | | | A01B-22, A02B-19, A03B-21, A04B-23, A05B-21, | | | | | | DSPM-4、DSPR-4、DSPW-4 | +------------+--------------+--------+--------+--- ---------------------------------------------+这些是我想要的结果:
+------------+--------------+--------+--------+--- -----------------------------------------+ |学生 ID |排序_PIDM |上一页 |第一 |测试 | +------------+--------------+--------+--------+--- -----------------------------------------+ | A00249466 | 260670 |福勒 |马丁 | A01B-22, A02B-19, A03B-21,A04B-23, A05B-21,| | | | | | DSPM-4、DSPR-4、DSPW-4 | +------------+--------------+--------+--------+--- -----------------------------------------+【问题讨论】:
-
很遗憾,我将离开几天。如果我不回复你,那就是为什么。谢谢!