这里有三个表
   房屋表T_HOUSE:id,houseNo,housearea;
   收费项目表T_CHARGE:id,chargeName,chargeMount;
   房屋-收费项目表T_CHARGE_HOUSE:id,houseId,chargeId;
   其中,房屋-收费项目表 把 房屋表 和 收费项目表 关联起来,它的houseId和chargeId分别是房屋表和收费项目表的主键,房屋表和收费项目表是一对多的关系,也就是说一个房屋可以有多个收费项目.我想写一条sql语句把每个房屋对应的收费项目显示出来,也就是说sql语句执行结果应该如下所示:       房屋编号       房屋位置     收费项目名称        房屋1         济南         收费项目1,收费项目2,收费项目3
       房屋2         青岛         收费项目4,收费项目5,收费项目6请问用一条sql语句能实现上述显示结果吗?
如果不能的话那我应该怎么做?
我用的是struts和hibernate,数据库用的是oracle, 想在页面上按上述方式显示.
谢谢大家呀.

解决方案 »

  1.   

    10G
    select  a.houseNo 房屋编号 ,a.housearea 房屋位置 ,WMSYS.WM_CONCAT(b.chargeName) 收费项目名称 
     from T_HOUSE a,T_CHARGE b,T_CHARGE_HOUSE c
       where a.houseNo=c.houseNo
        and c.chargeId=b.id
    group by a.houseNo,a.housearea
      

  2.   

    这个好多地方有例子
    10G
    同楼上解决
    9i
    http://cosio.itpub.net/post/10244/467060
      

  3.   

    10G
    以下,参考此贴,用SYS_CONNECT_BY_PATH来实现
    http://topic.csdn.net/u/20080505/11/a0958b42-d938-465f-972a-0f61a2969c97.html?seed=491226048目前这样处理,收费项目里是乱序的,如果你想要按你的结果顺序显示
     收费项目1,收费项目2,收费项目3 
    就需要至少两层SQL,里层先关联查询所有单子排序,外层再分组select  houseNo 房屋编号 ,housearea 房屋位置 ,WMSYS.WM_CONCAT(b.chargeName) 收费项目名称 
     from (
    select a.houseNo,a.housearea ,b.chargeName
    T_HOUSE a,T_CHARGE b,T_CHARGE_HOUSE c
       where a.houseNo=c.houseNo
        and c.chargeId=b.id
        order by 1,2,3)
    group by houseNo,housearea