我建个表 t,字段为key,name 
数据有:1,a; 
       1,b; 
       2,a; 
       2,b; 
       2,c; 
我用:select t.key,wmsys.wm_concat(t.name) from t order by t.key 
结果会成为:1 a,b; 
              2 c,a,b; 
我想问下有没有方法使其第二行变为: 2 a,b,c ,也就是能排下序

解决方案 »


  1. select t.key,wmsys.wm_concat(t.name) 
    from (select * from t order by key) t
    group by t.key 
      


  2. select key,wmsys.wm_concat(name) from (
    select t.key,t.name from t order by t.key,t.name  
    ) group by key
      


  3. --wm_concat函数其实也是一个开窗函数,因此直接套用分析函数就可以了
    select t.key,wmsys.wm_concat(t.name)over(partition by t.key order by t.name) from t order by t.key 
      

  4. 只有这个能确保排序,不过记得要套一层取max
      

  5. SELECT key, MAX(NAME) NAME
      FROM (SELECT t.key,
                   wmsys.wm_concat(t.NAME) over(PARTITION BY t.key ORDER BY t.NAME) NAME
              FROM t)
     GROUP BY key;
      


  6. paddy的外面再套一层
    minitoy正解~~~with tab as
    (select 1 key, 'a' name from dual union all
    select 1,'b' from dual union all
    select 2,'a' from dual union all
    select 2,'b' from dual union all select 2,'c' from dual)SELECT key, MAX(NAME) NAME
      FROM (SELECT t.key,
                   wmsys.wm_concat(t.NAME) over(PARTITION BY t.key ORDER BY t.NAME) NAME
              FROM tab t)
     GROUP BY key;
    ------------------------------------------------------------------
    1 a,b
    2 a,b,c
      

类似问题 »