2009-07-17 82 views
1

我試着創建一個從Oracle 10g中的表創建的數據透視表。Oracle PL/SQL中的交叉表/數據透視表 - iBatis - Extjs和JasperReport

這裏是表結構:

CREATE TABLE KOMUNIKA.STOCK_AREA 
(
    PRODUCT_CODE VARCHAR2(20 BYTE)    NOT NULL, 
    PRODUCT_NAME VARCHAR2(50 BYTE), 
    AREA_CODE  VARCHAR2(20 BYTE), 
    AREA_NAME  VARCHAR2(50 BYTE), 
    QUANTITY  NUMBER(20,2) 
)

,我需要顯示爲那些數據:

 
Name  US  Europe Asia SthAm Aust Africa Rest  Total 
C 2601 156 86 437 27 279 22 708 1,715
C 2605 926 704 7,508 1,947 982 782 1,704 14,553
Total 56,941 72,891 118,574 55,868 46,758 19,813 60,246 431,091

然後我將抓住使用iBatis的框架的結果,然後在一個ExtJs的網格顯示它,如果任何人有與我一樣的問題並想分享它,這真的是我的大恩寵。

我也已經找到了一些資源開始:

http://www.sqlsnippets.com/en/topic-12200.html

但如果你們已經找到一個簡單的解決方案,你會救我的週末:(,

謝謝大家

+0

發現OAT JavaScript的數據透視表: HTTP:/ /oat.openlinksw.com 展開菜單在頁面左側,選擇菜單完整的widget> Pivot table。 真的很好看透視表,但不知道如何使用它並將其連接到數據庫:( – Ifnu 2009-07-17 17:45:33

+0

成功從燕麥項目中提取數據透視表組件,這裏是預覽 http://artivisi.com/~ifnu/komunika /pivot.html – Ifnu 2009-07-17 22:42:13

回答

1

只要你想在結果中的列數是固定的,你就可以使用CASE表達式和GROUP BY來完成SQL本身的數據透視表(你不能寫sql來返回可變數量的列)

比方說,你的領域是這樣的:

AREA_CODE AREA_NAME 
--------- --------- 
     101 US 
     102 Europe 
     103 Asia 
     104 South America 
     105 Australia 
     106 Africa 
     107 ... 
     108 ... 

您可以編寫返回結果的查詢你有上面:

SELECT PRODUCT_NAME 
     , SUM(CASE WHEN AREA_CODE = 101 
        THEN QUANTITY ELSE 0 END) US 
     , SUM(CASE WHEN AREA_CODE = 102 
        THEN QUANTITY ELSE 0 END) Europe 
     , SUM(CASE WHEN AREA_CODE = 103 
        THEN QUANTITY ELSE 0 END) Asia 
     , SUM(CASE WHEN AREA_CODE = 104 
        THEN QUANTITY ELSE 0 END) SthAm 
     , SUM(CASE WHEN AREA_CODE = 105 
        THEN QUANTITY ELSE 0 END) Aust 
     , SUM(CASE WHEN AREA_CODE = 106 
        THEN QUANTITY ELSE 0 END) Africa 
     , SUM(CASE WHEN AREA_CODE NOT IN (101, 102, 103, 104, 105, 106) 
        THEN QUANTITY ELSE 0 END) Rest 
     , SUM(QUANTITY) Total 
    FROM KOMUNIKA.STOCK_AREA 
GROUP BY PRODUCT_NAME;