日期:2014-05-16  浏览次数:21078 次

oracle纵向显示变为横向显示
我有一个表纵向显示大致如下:
商品编码   门店   销量
------------------------
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
...

由于本人刚接触oracle,仅处于一知半解的状态。仅会门店是固定的写法,
但如果门店不是固定的,就不知如何下手了,也曾搜索过一些类似的帖子,但都不是看得很明白,
特来此开帖,望各位大虾不吝赐教。

------解决方案--------------------
一SQL暂时无解,求大神
------解决方案--------------------
动态构造,这个很容易懂吧
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 ' 
------解决方案---------------