ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个列传行的问题

一个列传行的问题

原创 Linux操作系统 作者:abstractcyj 时间:2013-08-13 16:32:52 0 删除 编辑
原帖地址:
http://www.itpub.net/thread-1809277-1-1.html;

原始需求:

一个表的数据如下:

v_id        v_log  
a        1
a        2
a        3
a        4
a        5
a        6
a        7
a        8
a        9
a        10
a        11
a        12
b        1
b        2
b        3
b        4
b        5
b        6



但是我要得到的列转行的记录如下,没行只有5个(或者自定义)

a  1,2,3,4,5
a  6,7,8,9,10
a  11,12
b  1,2,3,4,5
b  6 

我的答案:

SELECT all_lv_log,
       LEVEL,
       substr(all_lv_log,
              regexp_instr(all_lv_log, ',', 1, 5 * (LEVEL - 1) + 1) - 1,
              decode(regexp_instr(all_lv_log, ',', 1, 5 * LEVEL),
                     0,
                     length(all_lv_log),
                     (regexp_instr(all_lv_log, ',', 1, 5 * LEVEL) - 1) -
                     (regexp_instr(all_lv_log, ',', 1, 5 * (LEVEL - 1) + 1) - 1) + 1))
  FROM (SELECT *
          FROM (SELECT listagg(lv_log, ',') within GROUP(ORDER BY lv_log) over(PARTITION BY v_id) all_lv_log,
                       lv_log,
                       v_id,
                       cnt,
                       cnt2,
                       rn
                  FROM (SELECT COUNT(*) over(PARTITION BY v_id) cnt,
                               ceil((COUNT(*) over(PARTITION BY v_id)) / 5) cnt2,
                               row_number() over(PARTITION BY v_id ORDER BY lv_log) rn,
                               lv_log,
                               v_id
                          FROM t))
         WHERE rn = 1)
CONNECT BY PRIOR v_id = v_id
       AND LEVEL <= cnt2
       AND PRIOR dbms_random.value IS NOT NULL;

udfrog的答案:


select  v_id, listagg(v_log, ',') within group (order by rn) result
from    (
select  t.*, row_number() over (partition by v_id order by v_log) rn
from    t
        )
group by v_id, trunc((rn-1)/5);

我给出的SQL还不能求出正确的结果,而udfrog的SQL既简练又能快速的求出答案。

求知的路还很长

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8520577/viewspace-768405/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
曾从事java方向开发多年。近年已经转入数据库方向。主要擅长SQL优化,Oracle数据库问题诊断,Oracle备份与恢复等。服务于医药物流,医院等行业

注册时间:2010-01-26

  • 博文量
    559
  • 访问量
    854605