id          name1          name2           course          num
1               A                     B                     EN              1
1               A                     B                     MA              2
1               A                     B                     TE              3
1               A                     C                     AE               1
1               A                     C                     AC                2
2              D                     F                      PE               1
2              D                     F                      PC                2
....
TEST表数据如上所示,我使用分析函数得到以下结果:
select * from(
select   id ,name1,name2,course,row_number()over(partition by  id ,name1,name2 order by num)rn from test);
id          name1          name2              course          rn
1               A                     B                     EN                1
1               A                     B                     MA                2
1               A                     B                     TE                3
1               A                     C                     AE                1
1               A                     C                     AC                2
2              D                     F                      PE                1
2              D                     F                      PC                2
问题是怎么以rn作为分组条件,来将数据一组一组取出。
比如rn1,2,3是一组的,1,2又是一组,1,2又是一组的,以此类推。

解决方案 »

  1.   

    -- 试一下这个,你没提供测试数据, 未测试
    select * from(
    select   id ,name1,name2,course,rank()over(order by id ,name1,name2 ) rn from test);
      

  2.   

    with aa as (select   id ,name1,name2,course,row_number()over(partition by  id ,name1,name2 order by num) rn,
        row_number() over() rn1 from test)
    select  id ,name1,name2,course,wm_concat(course) YY from aa group by id ,name1,name2,course,rn1-rn;即按 id ,name1,name2,course,rn2 分组就可满足你的要求了
      

  3.   

    直接按name1          name2分组读取,和你说的rn分组,效果不一样吗?