ITPub博客

首页 > 数据库 > Oracle > oracle纵向显示变为横向显示

oracle纵向显示变为横向显示

原创 Oracle 作者:us_yunleiwang 时间:2013-12-05 17:20:08 0 删除 编辑
我有一个表纵向显示大致如下:
商品编码   门店   销量
------------------------
001             a       100
001             b       50
002             c       250
002             a       10
003             b       15
...
我现在想把门店(门店数量不是固定的),销量变为横向显示,如下
商品编码   门店a   门店b   门店c   ...
--------------------------------------
001            100      50
002            10       250
003                        15

方法1:
动态构造,这个很容易懂吧
DECLARE
  V_SQL VARCHAR2(2000);
  CURSOR CURSOR_1 IS
    SELECT DISTINCT 门店 FROM TB T ORDER BY 门店;
 
BEGIN
  V_SQL := 'SELECT 商品编码';
  FOR V_XCLCK IN CURSOR_1 LOOP
    V_SQL := V_SQL || ',' || 'SUM(DECODE(门店,''' || V_XCLCK.门店 ||
             ''',销量,0)) AS ' || V_XCLCK.门店;
  END LOOP;
 
  V_SQL := V_SQL || ' FROM TB GROUP BY 商品编码';
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  V_SQL := 'CREATE OR REPLACE VIEW TB2  AS ' || V_SQL;
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  EXECUTE IMMEDIATE V_SQL;
END;

方法2:
select 商品编号,
   max(decode(门店,a,销量)) 门店a,
   max(decode(门店,b,销量)) 门店b,
   max(decode(门店,c,销量)) 门店c
from 表
group by 商品编号;

方法3:
DECLARE
  V_SQL VARCHAR2(2000);
  CURSOR CURSOR_1 IS
    SELECT DISTINCT 门店 FROM TB T ORDER BY 门店;
 
BEGIN
  V_SQL := 'SELECT 商品编码';
  FOR V_XCLCK IN CURSOR_1 LOOP
    V_SQL := V_SQL || ',' || 'SUM(DECODE(门店,''' || V_XCLCK.门店 ||
             ''',销量,0)) AS ' || V_XCLCK.门店;
  END LOOP;

  V_SQL := V_SQL || ' FROM TB GROUP BY 商品编码';
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  V_SQL := 'CREATE OR REPLACE VIEW TB2  AS ' || V_SQL;
  --DBMS_OUTPUT.PUT_LINE(V_SQL);
  EXECUTE IMMEDIATE V_SQL;
END;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23490154/viewspace-1062435/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: oracle函数介绍
请登录后发表评论 登录
全部评论

注册时间:2010-03-15

  • 博文量
    198
  • 访问量
    1393176