`

oracle中行转列的sql语句动态

阅读更多
create table T_TEST
(
  CITY        VARCHAR2(255) not null,
  YEAR        NUMBER(4) not null,
  MONTH       NUMBER(2) not null,
  SELL_AMOUNT NUMBER(26,2)
)

comment on table T_TEST
  is '各月世联在主要核心城市的销售金额';
comment on column T_TEST.CITY
  is '城市';
comment on column T_TEST.SELL_AMOUNT
  is '比如0.42代表42%';


insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('深圳', 2010, 5, 1.2);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('东莞', 2010, 5, .8);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('佛山', 2010, 5, .9);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('汕头', 2010, 5, .22);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('长沙', 2010, 5, .28);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('深圳', 2010, 4, 1.1);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('东莞', 2010, 4, .8);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('佛山', 2010, 4, .9);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('广州', 2010, 4, .67);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('汕头', 2010, 4, .22);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('长沙', 2010, 4, .28);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('深圳', 2010, 3, .9);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('佛山', 2010, 3, .9);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('广州', 2010, 3, .67);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('汕头', 2010, 3, .22);
insert into T_TEST (CITY, YEAR, MONTH, SELL_AMOUNT)
values ('长沙', 2010, 3, .28);
commit;


---存储过程生成行转列sql语句
create or replace procedure P_test1 is

    cursor   csr   is
        select   distinct   (city)   from   t_test;
    tmp_km   varchar2(400);
    str         varchar2(4000);
begin

/*select   t.year||t.month,
sum(decode(t.city, '深圳',t.sell_amount,0)) 深圳  ,
sum(decode(t.city, '佛山',t.sell_amount,0))   佛山,
sum(decode(t.city, '东莞',t.sell_amount,0))   东莞
from   t_test t
group   by   t.month,t.year
*/


    str   :=   'select   t.year||t.month ';
    open   csr;
      loop   fetch   csr   into   tmp_km;
    exit   when   csr%notfound;
    str   :=   str   ||   ',sum(decode(t.city, '   ||   chr(39)   ||   tmp_km   ||   chr(39)   ||
                  ',t.sell_amount,0))   '   ||   tmp_km;
end   loop;
str   :=   str   ||   '   from   t_test t   group   by   t.month,t.year';
dbms_output.put_line(str);



execute   immediate   str;

end P_test1;

//生成集合
create or replace procedure P_test1(p_Year NUMBER,p_Cursor OUT SYS_REFCURSOR) is

    cursor   csr   is
        select   distinct   (city)   from   t_test;
    tmp_km   varchar2(400);
    str         varchar2(4000);
begin

/*select   t.year||t.month,
sum(decode(t.city, '深圳',t.sell_amount,0)) 深圳  ,
sum(decode(t.city, '佛山',t.sell_amount,0))   佛山,
sum(decode(t.city, '东莞',t.sell_amount,0))   东莞
from   t_test t
group   by   t.month,t.year
*/


    str   :=   'select   t.year||t.month ';
    open   csr;
      loop   fetch   csr   into   tmp_km;
    exit   when   csr%notfound;
    str   :=   str   ||   ',sum(decode(t.city, '   ||   chr(39)   ||   tmp_km   ||   chr(39)   ||
                  ',t.sell_amount,0))   '   ||   tmp_km;
end   loop;
str   :=   str   ||   '   from   t_test t  where t.year='||p_Year||'  group   by   t.month,t.year';
dbms_output.put_line(str);

open p_Cursor for str;

exception

when others then

Dbms_Output.Put_Line('error');

close p_Cursor;


end P_test1;
分享到:
评论

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    一文了解华为Gauss数据库:开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比…

    Oracle、微软的数据库之所以能长久不衰,一方面在于其强大的技术开发和产品升级迭代能力,另一方面在于其对数据库的Knowhow理解足够深,这个是其他厂商短期难以超越的。华为在数据库领域逐步取得新的突破。2019年...

    C#.net_经典编程例子400个

    第1章 窗体与界面设计 1 1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 5 实例005 可以拉伸...

    C#程序开发范例宝典(第2版).part13

    实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7...

    C#程序开发范例宝典(第2版).part08

    实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7...

    C#程序开发范例宝典(第2版).part02

    实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7...

    C#程序开发范例宝典(第2版).part12

    实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例234 利用SQL语句执行外围命令 第9章 SQL查询相关技术 9.1 通用查询 实例235 SQL语句的应用方法 实例236 SQL语句的模糊查询 实例237 利用查询语句复制表结构 9.2 查询控件 实例238 查询指定控件内字符串...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例234 利用SQL语句执行外围命令 第9章 SQL查询相关技术 9.1 通用查询 实例235 SQL语句的应用方法 实例236 SQL语句的模糊查询 实例237 利用查询语句复制表结构 9.2 查询控件 实例238 查询指定控件内字符串...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例234 利用SQL语句执行外围命令  第9章 SQL查询相关技术   9.1 通用查询   cc实例235 SQL语句的应用方法   cc实例236 SQL语句的模糊查询   cc实例237 利用查询语句复制表结构   9.2 查询...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例234 利用SQL语句执行外围命令  第9章 SQL查询相关技术   9.1 通用查询   cc实例235 SQL语句的应用方法   cc实例236 SQL语句的模糊查询   cc实例237 利用查询语句复制表结构   9.2 查询...

Global site tag (gtag.js) - Google Analytics