logo 西林@生存 - 骑猪闯天下!
臭长:去除以逗号分隔的字符串的重复值
2007-1-5 21:41:00 By:xling

中午就看这个题了,只是第一反应是:这题不算很难,要有谁能用一句SQL能把它实现就更NB了!

下午又看这题,心里痒痒,就试着写了一下,还好,我还是奈着性子把它给写下来了。就当学习了吧!

要求:

如:'1,1,1,2,2,2,3,3,4,5,6,7,8,9,123,234,......'去除重复值1,2,3等.
效果为'1,2,3,4,5,6,7,8,9,123,234,....'

注,不是表,是一个字符串!

贴出我写SQL语句,当然如果用存储过程很容易解决,还好理解,不过吗...俺就用一句SQL来实现它!

SELECT * FROM (
    SELECT
        FF.TTT,
        FF.LEN
    FROM(
        SELECT
            EE.TT,
            EE.RN,
            EE.RNN,
            SYS_CONNECT_BY_PATH(EE.TT,',') AS TTT,
            LENGTH(SYS_CONNECT_BY_PATH(EE.TT,',')) AS LEN
        FROM (
            SELECT
                DD.TT,
                ROWNUM RN,
                ROWNUM + 1 AS RNN
            FROM (
                SELECT
                    CC.TT,CC.RN,
                    ROW_NUMBER() OVER (PARTITION BY CC.TT ORDER BY CC.RN) AS RNN
                FROM (
                    SELECT TT,ROWNUM AS RN FROM(
                        SELECT
                            SUBSTR(VAL,
                                   INSTR(AA.VAL,',',1,ROWNUM) + 1,
                                   INSTR(AA.VAL,',',1,ROWNUM + 1) - INSTR(AA.VAL,',',1,ROWNUM) - 1
                            ) AS TT   
                        FROM (
                            SELECT ',' || 'AA,AA,CC,BB,CC,AA,DD,CC,FF,CC' || ',' AS VAL FROM DUAL
                        ) AA
                        CONNECT BY ROWNUM < LENGTH(AA.VAL)
                    ) BB
                    WHERE BB.TT IS NOT NULL
                ) CC
                ORDER BY CC.RN
            ) DD
            WHERE DD.RNN = 1
        )EE
        CONNECT BY PRIOR RNN = RN
    )FF
    ORDER BY LEN DESC
) GG
WHERE ROWNUM = 1

结果图:

问题来源:

http://www.oracle.com.cn/viewthread.php?tid=111703&pid=884479&page=1&extra=page%3D1#pid884479

转我的贴,写你的名,是一种可耻的行为!请不要让我BS你!
阅读全文 | 回复(0) | 引用通告 | 编辑

发表评论:

    密码:
    主页:
    标题:
    页面数据正在载入...
<<  < 2007 - >  >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Placard
1,長江後浪推前浪,前浪死在沙灘上!
2,有了钱的男人,才是真正的男人...
3,不要以为把你的小JJ埋进土里,你就rape了整个地球;不要以为把你的小JJ朝向天空,你就rape了整个宇宙!
Logon System
Search
Info about this blog
Others
myDream
bxna 京ICP备05002321号