WITH t AS
(
SELECT 'BU0301' bu
FROM DUAL
UNION ALL
SELECT 'BU0701'
FROM DUAL
UNION ALL
SELECT 'BU0401'
FROM DUAL
UNION ALL
SELECT 'BU0501'
FROM DUAL
UNION ALL
SELECT 'BU0401'
FROM DUAL
UNION ALL
SELECT 'BU0801'
FROM DUAL
UNION ALL
SELECT 'BU0901'
FROM DUAL
UNION ALL
SELECT 'BU0201'
FROM DUAL
UNION ALL
SELECT 'BU0101'
FROM DUAL
UNION ALL
SELECT 'BU0601'
FROM DUAL)
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH ('''' || bu || '''', ', ')), 3)
FROM (SELECT ROWNUM rn, bu
FROM (SELECT DISTINCT bu
FROM t))
START WITH rn = 1
CONNECT BY rn - 1 = PRIOR rn;
-- 输出: 'BU0301', 'BU0201', 'BU0301', 'BU0401', 'BU0501', 'BU0601', 'BU0701', 'BU0801', 'BU0901'
甚奇! 'BU0101' 不见了! 另外, 明明没 BU 重复且已加 DISTINCT, 但结果竟有 'BU0301' 重复!
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH ('''' || bu || '''', ', ')), 3)
FROM (SELECT ROWNUM rn, bu
FROM (SELECT DISTINCT bu
FROM t
ORDER BY bu))
START WITH rn = 1
CONNECT BY rn - 1 = PRIOR rn;
或者:
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH ('''' || bu || '''', ', ')), 3)
FROM (SELECT DISTINCT DENSE_RANK () OVER (ORDER BY bu) AS rn, bu
FROM t)
START WITH rn = 1
CONNECT BY rn - 1 = PRIOR rn;
-- 输出: 'BU0101', 'BU0201', 'BU0301', 'BU0401', 'BU0501', 'BU0601', 'BU0701', 'BU0801', 'BU0901'