oracle縱向顯示變為橫向顯示

us_yunleiwang發表於2013-12-05
我有一個表縱向顯示大致如下:
商品編碼   門店   銷量
------------------------
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部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062435/,如需轉載,請註明出處,否則將追究法律責任。

相關文章