a表
批发商ID 批发商名称
----------
1     甲
2     乙
3     丙b表
水果 批发商ID 价格
----------
苹果  1    5
梨   2    3
西瓜    2    0.8
苹果  3    4.8
苹果  2    5
梨   1    2.8
梨   3    2.9求:(假设用户是甲批发商),数据结果如下
水果  价格(甲) 价格(乙) 价格(丙)
---------------------
苹果      5          5             4.8

解决方案 »

  1.   

    select 水果,
           max(decode(批发商id,1,价格)) as 批发商甲,
           max(decode(批发商id,2,价格)) as 批发商乙,
           max(decode(批发商id,3,价格)) as 批发商丙 from B表group by 水果;
      

  2.   

    批发商ID是自增型,所以decode(批发商id,1,价格)) 是不是不太正确??
      

  3.   

    如果你的批发商的个数是不固定的话
    实现就要难了
    那样最好就是用pl/sql吧
      

  4.   

    是个有难度的SQL啊,期待高手给出答案啊!!!
      

  5.   

    笨笨的方法: 
    CREATE OR REPLACE PROCEDURE Test(c in number) IS 
    CProducer number; ------批发商数
    str varchar2(1000) ; 
    type r_fruit is ref cursor ;
    c1 r_fruit ;
    v_fruit varchar2(10)   ;
    v_p1  number;      ------供应商提供水果的价格
    v_p2  number;
    v_p3  number;
    v_p4  number;
    v_p5  number;
    v_p6  number;
    v_p7  number;
    v_p8  number;
    v_p9  number;      -------这部分需要修改begin
      select count(1) into CProducer from test2 ;  --test2 为a表 
      str := 'select fruit,' ;
      for i in 1 .. CProducer-1 loop 
      str := str || 'sum(decode(producer_id,' ||to_char(i)||',price)) ,' ;
      end loop;
      
      str := str||'sum(decode(producer_id,'||to_char(CProducer)||',price)) '||'from test group by fruit ';            ------test为b表  dbms_output.put_line('str:' || str) ; 
    /*  execute immediate str;*/
      open c1 for str ;
        loop
        fetch c1 into v_fruit,v_p1,v_p2,v_p3,v_p4,v_p5,v_p6,v_p7,v_p8,v_p9;   ---等待修改
        exit when c1%notfound;
        dbms_output.put_line(v_fruit||'  '||v_p1||'  '|| v_p2||'  '|| v_p3||'  '|| v_p4||'  '|| v_p5||'  '|| v_p6||'  '|| v_p7||'  '|| v_p8||'  '|| v_p9);
        end loop ;
      close c1;end Test;