日期:2014-05-17  浏览次数:20805 次

这个存储过程应该如何编写
本人有一个需求。数据库中的字段如下

year    month     supermarketName        sales
2012     1               超市1             500
2012     1               超市2             800
。。。     。。        。。                    。。。
2013     10             超市1              1400


想要通过一个存储过程表示为如下需求
year       supermarketName   1月     2月    3月    4月 。。。。  12月
2012           超市1         500    600   
2012           超市2         800    700

这个存储过程应该如何写呢,本人尚在学习阶段,工作急需呀。谢谢大家了!!!

因为sales字段是动态计算得出的,需要写一个动态的行转列的存储过程,谢谢大家,这个存储过程应该如何写?本人不太会。谢谢大家!!!
补充一下,sales的计算公式大概的意思max(case when month=1 then 1-sum(sale)/count(id) else null end)之类的公式。

数据库 工作 oracle??pl/sql

------解决方案--------------------
create or replace procedure sp_tab(c_result   out varchar2)
as
  sqlstr varchar2(4000) := 'select year, supermarketname ' ;
  c1     sys_refcursor;
  v1     varchar2(100);
begin
  open c1 for 'select distinct month from tab';
  loop
    fetch c1 into v1;
    exit when c1%notfound;
         sqlstr := sqlstr 
------解决方案--------------------
',max(decode(month,''' 
------解决方案--------------------
 v1 
------解决方案--------------------
 ''',sales))"' 
------解决方案--------------------
 v1 
------解决方案--------------------
 '月"';
  end loop;
  close c1;
  sqlstr := sqlstr 
------解决方案--------------------
 ' from tab group by year, supermarketname';a
  c_result:= sqlstr;
  dbms_output.put_line(c_result);