2009-07-17 8 views
1

Oracle 10gのテーブルから作成したピボットテーブルを作成しようとしました。 、OracleのPL/SQLでのクロス集計/ピボットクエリ - iBatis - ExtjsとJasperReport

 
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

、私はExtJSのグリッドに表示次いで、iBatisのフレームワークを使用して結果を取得します:ここで

はテーブル構造である:

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) 
)

iはとして表示されるもののデータが必要誰かが私と同じ問題を抱えていて、それを共有したいのであれば、私からは本当に大きな好意です。

私もすでに開始するためのいくつかのリソースを見つける:

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

が、あなたがたのうち、すでに簡単な解決策を見つけた場合は、あなたは:(私の週末を救う、

はあなたのすべて

に感謝
+0

たOAT javascriptのピボットテーブル: ます。http:/ /oat.openlinksw.com ページの左側にあるメニューを展開し、メニューの完全ウィジェット>ピボットテーブルを選択します。 素晴らしいピボットテーブルを使用していますが、ピボットテーブルを使用してデータベースに接続する方法がわかりません:( – Ifnu

+0

oatプロジェクトからピボットテーブルコンポーネントを引き継ぎました。プレビューは http://artivisi.com/~ifnu/komunika /pivot.html – Ifnu

答えて

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; 
関連する問題