Plsql Oracle的PL/SQL-iBatis-Extjs和JasperReport中的交叉表/透视查询

Plsql Oracle的PL/SQL-iBatis-Extjs和JasperReport中的交叉表/透视查询,plsql,extjs,ibatis,Plsql,Extjs,Ibatis,我试图创建一个从Oracle10g中的表创建的透视表 以下是表格结构: 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

我试图创建一个从Oracle10g中的表创建的透视表

以下是表格结构:

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网格中,如果有人和我有相同的问题并希望共享,这真是我的一大优势

我还找到了一些资源来启动:

但是,如果你们中有人已经找到了一个更简单的解决方案,你就可以省下我的周末了:


谢谢大家

您可以使用大小写表达式和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;

您可以使用CASE表达式和groupby在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;

找到OAT javascript透视表:展开页面左侧的菜单,选择菜单完成小部件>透视表。pivot表确实很好看,但不确定如何使用它并将其连接到数据库:成功地从oat项目中提取pivot表组件,这里是预览找到的oat javascript pivot表:在页面左侧展开菜单,选择菜单完成小部件>pivot表。透视表确实很好看,但不确定如何使用它并将其连接到数据库:成功地从oat项目中提取透视表组件,下面是预览