Plsql Oracle的PL/SQL-iBatis-Extjs和JasperReport中的交叉表/透视查询
我试图创建一个从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 TotalPlsql 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
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项目中提取透视表组件,下面是预览