select  s.id, s.start_y , s.start_m, s.end_y, s.end_m, d.dept_name
  from T_HZOA_APP_KQSZ s, T_HZDRP_SYS_DEPT d 
 where s.organid like '%' || d.id || '%' 
查询出来N条数据,其中一个字段不同,别的都相同。
我想得到一条结果,把不同的以“,”或者“;”分隔,都放到一个字段里。
这样改怎么改SQL呢?

解决方案 »

  1.   

    select s.id, s.start_y , s.start_m, s.end_y, s.end_m, wm_concat(d.dept_name)
      from T_HZOA_APP_KQSZ s, T_HZDRP_SYS_DEPT d  
     where s.organid like '%' || d.id || '%' 
    group by s.id, s.start_y , s.start_m, s.end_y, s.end_m
      

  2.   

    用wm_concat可以实现,根据你相同的字段分组后,对那个不同的字段用wm_concat实现连接,默认以逗号连接
      

  3.   

    感谢各位的回答,这个在oracle上面可以正确实现了,可是要支持多个数据库的,这个方法wm_concat就不能通用了,郁闷。
      

  4.   


    把结果集建个视图 
    在写个函数 loop在拼接起来
      

  5.   


    肯定的啊,Oracle的东西,其它数据库不一定支持,呵呵,
    不过,用函数应该就可以通用了吧,自己创建一个my_concat函数,原理很简单
     --可以通过函数去实现
    create or replace function my_concat(P_ID in varchar2)
    return varchar2
    is
      result    varchar2(4000);
    begin
           for rs in (select NAME from T_HZDRP_SYS_DEPT where ID=P_ID) loop
               result :=result || rs.NAME || ',';
           end loop;
           result := rtrim(result,',');  --去掉最后一个逗号
           return result;
    end;select s.id, s.start_y , s.start_m, s.end_y, s.end_m, MY_CONCAT(d.dept_name) dept_name
      from T_HZOA_APP_KQSZ s, T_HZDRP_SYS_DEPT d  
     where s.organid like '%' || d.id || '%'