取出来的数据是
楼层号  是否开启
1    Y
2    Y
3    Y
4    N
5    Y
6    N我想取的时候直接取这种形式
楼层号  是否开启
1-3,5   Y
4,6     N我知道WMSYS.WM_CONCAT这个可以实现逗号相连,但把1、2、3组成1-3该怎么办呢?

解决方案 »

  1.   

    楼主是要计算 楼层号如果是连续的就用-  不连续的就用‘,’吗? 看看lag函数
      

  2.   

    SELECT min(a)||'-'||max(a),'Y' FROM T WHERE T.B='Y'
    group by a-rownum
    UNION ALL
    SELECT min(a)||'-'||max(a),'N' FROM T WHERE T.B='N'
    group by a-rownum;
      

  3.   

    正规点:drop table t;
    create table t(a int ,b varchar2(10));
    insert into t values(1,'Y');
    insert into t values(2,'Y');
    insert into t values(3,'Y');
    insert into t values(4,'N');
    insert into t values(5,'Y');
    insert into t values(6,'N');
    insert into t values(7,'Y');
    insert into t values(8,'Y');
    insert into t values(9,'N');
    insert into t values(10,'Y');
    select B, min(A) || '-' || max(A) as e
      from (select B, A, A - row_number() over(partition by B order by A) rn
              from T)
     group by B, rn
     order by B, rn;
      

  4.   

    个人觉得关于数据表现形式,为何非要用sql完成?
      

  5.   

    中间可能是没有连续的,比如你上面的4的情况,并且间断点还会不止一个,就不能直接的用sql了,这是我的一点想法。
      

  6.   


    因为 1: 排序,组合,装箱这些操作你的应用层代码未见得比数据库性能好。
         2: 几千万条数据传到应用程序里排序聚合装箱好,还是在数据库里完成后传过来一个几百行的结果集好?
    我的意思是可以用pl/sql,可以用应用代码
    因为楼主的问题看起来更像是行列转换
    数据已经排序、组合完了,剩下的要用何种形式展现,对数据的展现格式,没用必要非要用sql