欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

这个存储过程应该怎么编写

更新时间: 2014-01-05 02:14:11 责任编辑: Author_N1

 

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

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)之类的公式。


--参考方法--
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);
end sp_tab;
--参考方法--
或者直接通过FOR循环


CREATE OR REPLACE PROCEDURE P_TEST
IS
  V_SQL VARCHAR2(2000); 
 
    BEGIN
      V_SQL := 'SELECT YEAR,SUPERMAKETNAME ';
      FOR T_MONTH IN 1..12
      LOOP
        V_SQL := V_SQL 
--参考方法--
 ',' 
--参考方法--
 'MAX(DECODE(MONTH,'
--参考方法--
T_MONTH
--参考方法--
',sales,0)) "'
--参考方法--
T_MONTH
--参考方法--
'月"';
      END LOOP;
      V_SQL := V_SQL 
--参考方法--
 ' FROM TB' ;
      V_SQL := V_SQL 
--参考方法--
 ' GROUP BY YEAR,SUPERMAKETNAME';
     DBMS_OUTPUT.PUT_LINE(V_SQL);
    --EXECUTE IMMEDIATE V_SQL;
    END;
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:11
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7331/
本文WWW.DOC100.NET DOC100.NET版权所有。