表A中存储数据为:id   name   age     sex 
1   李四   20      女
1   王五   30      男
                  1    张三   40      女
求一这样显示数据的sql语句:id          name-age                sex
1      李四-20/王五-30/张三-40   女/男/女                             select (name||’-‘||age  ) name-age ,sex from A  这条只是得到横着的拼接,还需要求上下拼接的!谢谢!

解决方案 »

  1.   

    select id ,sys_connect_by_path(name||’-‘||age,'/'),sys_connect_by_path(sex,'/') from A
      

  2.   


    With a As(
    select 1 id,'李四' Name, 20 age, '女' sex From dual Union All
    Select 1, '王五', 30, '男' From dual Union All
    Select 1, '张三', 40, '女' From dual 
    )
    Select Id,
           Replace(Wm_Concat(Name || '-' || Age), ',', '/'),
           Replace(Wm_Concat(Sex), ',', '/')
      From a
     Group By Id
      

  3.   

    select id ,sys_connect_by_path(name||’-‘||age,'/'),sys_connect_by_path(sex,'/') from A 
     
     这个方法挺新颖的,但是弹出:此查询块中要求CONNECT BY子句
      

  4.   

    select id,
      2  max(substr(SYS_CONNECT_BY_PATH("name-age",'/'),2)) "name-age",
      3  max(substr(SYS_CONNECT_BY_PATH(sex,'/'),2)) sex
      4  from
      5  (
      6  select id,name||'-'||age "name-age",sex,row_number() over(partition by id order by id) rn from t1
      7  )
      8  connect by prior rn = rn-1
      9  group by id
    这有一个差不多对,但是如果ID为1的有很多很多个,它就会截断一部分