一个常见的查询

在csdn看经常看到类似这样的帖子:

查询结果
id                       nid
1000000318    2                                                                                                                              
1000000644    2                                                                                                                              
1000000927    2                                                                                                                              
1000000319    3                                                                                                                              
1000000645    3                                                                                                                              
1000000928    3                                                                                                                              
变成这个结果
id nid
1000000318 ,1000000644 ,1000000927  2
1000000319 ,1000000645 ,1000000928  3
怎么写SQL  

类似的问题很多 ,解决的思路只有一个:构造一棵树,然后用sys_connect_by_path() 进行连接

SQL> create table test(id number,nid number);

表已创建。

SQL> insert into test values(1000000318,2 );

已创建 1 行。

SQL> insert into test values(1000000644,2 );

已创建 1 行。

SQL> insert into test values(1000000927,2 );

已创建 1 行。

SQL> insert into test values(1000000319,3 );

已创建 1 行。

SQL> insert into test values(1000000645,3 );

已创建 1 行。

SQL> insert into test values(1000000928,3 );

已创建 1 行。

SQL> commit;
SQL> column max(resu) format a50
SQL> column max(resu) format a50
SQL> select max(resu), nid
  2    from (select substr(sys_connect_by_path(id, ','), 2) resu, nid
  3            from (select t.*, lead(rn) over(partition by nid order by rn) prn

  4                    from (select rownum rn, id, nid from test) t)
  5          connect by prior rn = prn
  6           start with prn is null)
  7   group by nid;

MAX(RESU)                                                 NID
-------------------------------------------------- ----------
1000000927,1000000644,1000000318                            2
1000000928,1000000645,1000000319                            3
提交完成。


 

 至于连接的顺序,在于你怎样构建这颗树,比如 例子中order by rn 改为order by rn desc 则结果变为

1 1000000318,1000000644,1000000927  2
2 1000000319,1000000645,1000000928  3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值