订单历史表:
OrderA  字段有:
订单编号,订单金额
DD-0001  2500
订单明细表
OrderB   字段有:
订单编号,产品名称,产品数量
DD-0001 ,钢笔    ,2
DD-0001 ,书      ,1
DD-0001 ,纸      ,10现在要求达到这样的效果:
一条SQL语句实现订单编号,订单金额,订单产品以数量
DD-0001 ,2500    ,钢笔*2;书*1;纸*10字段之间我是用逗号分隔求SQL语句,本来实现想不出来,请老鸟出招!!!!

解决方案 »

  1.   

    楼主参考下我的blog吧,有类似这种纵向记录横向显示的问题。
    http://blog.csdn.net/kinglht
      

  2.   

    insert into orderA
    select 'DD-0001','2500' from dual;
    create table orderItem(orderNo varchar2(10),productName varchar2(30),productNum int);
    insert into orderItem
    select 'DD-0001','钢笔','2' from dual
    union all
    select 'DD-0001','书','1' from dual
    union all
    select 'DD-0001','纸','10' from dual;
     select b.orderNo,c.orderNum , max(substr((sys_connect_by_path(productName||'*'||productNum,',')),2))  as "订单产品乘以数量"  
     from (
     select a.orderNo,productName,productNum,orderNum,
            rownum rnum,
            row_number() over(partition by a.orderNo order by a.orderNo) rn1
     from orderItem a ,orderA 
     ) b,orderA c
     start with rn1=1
     connect by rnum-1=prior rnum
     group by b.orderNo,c.orderNum
    ;
    测试结果:
      订单编号  订单金额   订单产品以数量
      DD-0001   2500       钢笔*2;书*1;纸*10
    楼主试试