交叉报表的实现全过程

业务描述: 产品表     产品编号 尺寸(码)  颜色  数量 1  38   黑  100 1  38   红  10 1  40   黑  50 2  38   黑  100 3  38   红  5 产品名称表   产品编号 产品名称 1  红蜘蛛皮鞋 2  蓝蜘蛛布鞋 3  黑寡妇皮鞋 要求展示报表如下: 统计报表   尺寸/颜色 黑  红 38  200 15 40  50  0 建表: create table T_SHOES (   P_ID    NUMBER(10),   P_SIZE  NUMBER(3),   P_COLOR VARCHAR2(6),   P_NUM   NUMBER(5) ); 输入测试数据如下: select p_id, p_size, p_color, p_num from t_shoes;   P_ID P_SIZE P_COLOR P_NUM 1 38 黑 100 1 38 红 10 1 40 黑 50 2 38 黑 100 3 38 红 5   因为结果集要通过存储过程,所以创建结果统计报表: create table t_shoes_report (   P_SIZE  NUMBER(3),   P_COLOR VARCHAR2(6),   P_NUM   NUMBER(5) ); 创建视图,以提供所有颜色和尺寸的匹配情况(利用了笛卡尔乘积)   create or replace view v_all_products as select distinct all_size.p_size,all_color.p_color from (select distinct t.p_size from t_shoes t ) all_size, (select distinct t.p_color from t_shoes t) all_color 通过逐步打印,完成以下存储过程的编写: create or replace procedure  sp_report   as   str1 number(3);   str2 varchar2(30000); begin    delete from t_shoes_report;    for all_size in (select distinct p_size from v_all_products )    loop         --dbms_output.put_line(all_size.p_size);         for all_color in ( select distinct p_color from v_all_products where p_size = all_size.p_size)         loop            --dbms_output.put_line(all_size.p_size||','||all_color.p_color);            --统计           select nvl(sum(t.p_num),0) into str1 from t_shoes t            where t.p_size = all_size.p_size            and t.p_color  = all_color.p_color;            --str2 := all_size.p_size||','||all_color.p_color||','||str1;            --dbms_output.put_line(str2);            insert into t_shoes_report(p_size,p_color,p_num)            values(all_size.p_size,all_color.p_color,str1);         end loop;      end loop;        commit;       end ;     测试:     SQL> execute sp_report;     PL/SQL procedure successfully completed     SQL> select * from t_shoes_report;     P_SIZE P_COLOR  P_NUM    表A ------ ------- ------         38 黑         200         38 红          15         40 黑          50         40 红           0     在得到上面的数据,可以通过以下方法进行报表显示     报表     尺寸/颜色 黑 红 38 200 15 40 50 0 1、通过java程序将表A数据转化HTML代码,显示为表B     2、通过SQL语句转化     select        t.p_size 尺寸,      sum(decode(t.p_color,'黑',t.p_num)) 黑,      sum(decode(t.p_color,'红',t.p_num)) 红     from t_shoes_report t   group by t.p_size        结果:     尺寸 黑 红 38 200 15 40 50 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值