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
批发商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
max(decode(批发商id,1,价格)) as 批发商甲,
max(decode(批发商id,2,价格)) as 批发商乙,
max(decode(批发商id,3,价格)) as 批发商丙 from B表group by 水果;
实现就要难了
那样最好就是用pl/sql吧
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;