表里面全是电影节目,我想随机取8个,但上下级怎么处理?比如有电影
爱国者
爱情呼叫转移
宝贝计划
别拿自己不当干部
别惹小孩
冰河世纪2b
冰河世纪2a
彩票也疯狂
东方海盗传奇a
东方海盗传奇b
飞行者
侏罗纪公园iii
侏罗纪公园ii
侏罗纪公园i
音乐
兄弟
戏王之王
嬉戏江湖
屠龙传奇
天行者a
天行者b
太极张三丰a
太极张三丰b
太极a
太极b
双龙记
神枪手智多星
三分钟先生
忍者兵b
忍者兵a
奇迹b
奇迹a
破敌随机取8个后,怎么能上这种a b(也就是上下级)的不分开?即要不都不取,要不AB都得有.只取8个

解决方案 »

  1.   

    没有想到好的方法,只能把含a,b的当作一个片子处理:
    WITH a AS(
    select '比如有电影' filmName from dual union all
    select '爱国者' filmName from dual union all
    select '爱情呼叫转移' filmName from dual union all
    select '宝贝计划' filmName from dual union all
    select '别拿自己不当干部' filmName from dual union all
    select '别惹小孩' filmName from dual union all
    select '冰河世纪2b' filmName from dual union all
    select '冰河世纪2a' filmName from dual union all
    select '彩票也疯狂' filmName from dual union all
    select '东方海盗传奇a' filmName from dual union all
    select '东方海盗传奇b' filmName from dual union all
    select '飞行者' filmName from dual union all
    select '侏罗纪公园iii' filmName from dual union all
    select '侏罗纪公园ii' filmName from dual union all
    select '侏罗纪公园i' filmName from dual union all
    select '音乐' filmName from dual union all
    select '兄弟' filmName from dual union all
    select '戏王之王' filmName from dual union all
    select '嬉戏江湖' filmName from dual union all
    select '屠龙传奇' filmName from dual union all
    select '天行者a' filmName from dual union all
    select '天行者b' filmName from dual union all
    select '太极张三丰a' filmName from dual union all
    select '太极张三丰b' filmName from dual union all
    select '太极a' filmName from dual union all
    select '太极b' filmName from dual union all
    select '双龙记' filmName from dual union all
    select '神枪手智多星' filmName from dual union all
    select '三分钟先生' filmName from dual union all
    select '忍者兵b' filmName from dual union all
    select '忍者兵a' filmName from dual union all
    select '奇迹b' filmName from dual union all
    select '奇迹a' filmName from dual union all
    select '破敌' filmName from dual
    )
    SELECT fl, rownum rn
      FROM (SELECT same, substr(MAX(sys_connect_by_path(filmname, ',')), 2) fl
              FROM (SELECT filmname,
                           substr(filmname, 1, length(filmname) - 1) same,
                           row_number() over(PARTITION BY substr(filmname, 1, length(filmname) - 1) ORDER BY filmname) rn
                      FROM a)
             WHERE substr(filmname, -1, 1) IN ('a', 'b')
                OR length(REPLACE(filmname, 'a')) = length(filmname)
                OR length(REPLACE(filmname, 'b')) = length(filmname)
             START WITH rn = 1
            CONNECT BY PRIOR rn = rn - 1
                   AND PRIOR same = same
             GROUP BY same
             ORDER BY dbms_random.VALUE)
     WHERE rownum <= 8;
      

  2.   

    这样不行啊.一来影片比较多,而且会增加.另外我的目的是制作播放列表,完成后的格式类似于以下格式.现在的处理办法是去掉了AB(上下级)这种.MovieFiles0=Hard Disk2\Video\神枪手智多星.wmv
    MovieFiles1=Hard Disk2\Video\落叶归根.wmv
    MovieFiles2=Hard Disk2\Video\嬉戏江湖.wmv
    MovieFiles3=Hard Disk2\Video\连环局.wmv
    MovieFiles4=Hard Disk2\Video\侏罗纪公园ii.wmv
    MovieFiles5=Hard Disk2\Video\侏罗纪公园i.wmv
    MovieFiles6=Hard Disk2\Video\屠龙传奇.wmv
    MovieFiles7=Hard Disk2\Video\爱国者.wmv
    MovieFiles8=Hard Disk2\Video\兄弟.wmv
    MovieFiles9=Hard Disk2\Video\龙虎门.wmv
    MovieFiles10=Hard Disk2\Video\飞行者.wmv
    MovieFiles11=Hard Disk2\Video\侏罗纪公园iii.wmv
    MovieFiles12=Hard Disk2\Video\别拿自己不当干部.wmv
    MovieFiles13=Hard Disk2\Video\破敌.wmv
    MovieFiles14=Hard Disk2\Video\爱情呼叫转移.wmv
    MovieFiles15=Hard Disk2\Video\音乐.wmv
    MovieFiles16=Hard Disk2\Video\憨豆先生的假期2.wmv
    MovieFiles17=Hard Disk2\Video\戏王之王.wmv
    MovieFiles18=Hard Disk2\Video\疯狂的石头.wmv
    MovieFiles19=Hard Disk2\Video\彩票也疯狂.wmv
    MovieFiles20=Hard Disk2\Video\男子 汉大丈夫.wmv
    MovieFiles21=Hard Disk2\Video\空中决战.wmv
    MovieFiles22=Hard Disk2\Video\三分钟先生.wmv
    MovieFiles23=Hard Disk2\Video\墨攻.wmv
      

  3.   

    具体应该如何操作呢?SQL语句怎么写方便?