题目
    项目代码        省市
    A               天津
    A               山西
    A               广东
    B               北京
    B               上海
    C               上海
    C               天津
    D               大连
    D               哈尔滨
    .....结果
   项目代码         省市
   A                天津;山西;广东
   B                北京;上海
   C                上海;天津
   D                大连;哈尔滨
   ....
 就是按项目代码分组,并把该项目的省市存到一起。sql不能把项目代码写死,因为可能有成百上千的项目呢!!!这个sql怎么写?谢谢大家了~~

解决方案 »

  1.   

    如果你可以不用';'连接省市,并且oracle版本在10g以上
    可以用
    select 项目代码,wm_concat(省市)省市 from test_m
    group by 项目代码;项目代码 省市
    A 天津,山西,广东
    B 北京,上海
    C 上海,天津
    D 大连,哈尔滨否则的话,用
    select 项目代码,substr(max(sys_connect_by_path(省市,';')),2)省市
    from (
    select t.*,row_number()over(partition by 项目代码 order by rownum)rn from test_m t)
    start with rn=1
    connect by prior rn+1=rn and prior 项目代码=项目代码
    group by 项目代码
    order by 项目代码项目代码 省市
    A 天津;山西;广东
    B 北京;上海
    C 上海;天津
    D 大连;哈尔滨
      

  2.   

    select 项目代码,  replace(wmsys.wm_contact(省市),',',';') from tablename group by 项目代码;
      

  3.   

    select 项目代码,wmsys.wm_concat(省市) from tablename group by 项目代码