支持Pivot

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@165 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-05-21 01:49:01 +00:00
parent 98053e1252
commit 793ea1ccd0
4 changed files with 80 additions and 21 deletions
@@ -0,0 +1,59 @@
package com.alibaba.druid.sql.dialect.oracle.ast.clause;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr;
public class PivotClause {
private boolean xml;
private final List<Entry> entries = new ArrayList<Entry>();
private final List<SQLName> pivotFor = new ArrayList<SQLName>();
private final List<SQLName> pivotIn = new ArrayList<SQLName>();
public List<Entry> getEntries() {
return entries;
}
public List<SQLName> getPivotFor() {
return pivotFor;
}
public List<SQLName> getPivotIn() {
return pivotIn;
}
public static class Entry {
private OracleAggregateExpr aggregateExpr;
private String alias;
public OracleAggregateExpr getAggregateExpr() {
return aggregateExpr;
}
public void setAggregateExpr(OracleAggregateExpr aggregateExpr) {
this.aggregateExpr = aggregateExpr;
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
}
public boolean isXml() {
return xml;
}
public void setXml(boolean xml) {
this.xml = xml;
}
}
@@ -47,6 +47,7 @@ public class OracleSQLParserResourceTest extends TestCase {
exec_test("bvt/parser/oracle-28.txt");
exec_test("bvt/parser/oracle-29.txt");
exec_test("bvt/parser/oracle-30.txt");
exec_test("bvt/parser/oracle-31.txt");
}
+8 -21
View File
@@ -1,25 +1,12 @@
WITH
org_chart (eid, emp_last, mgr_id, reportLevel, salary, job_id) AS
(
SELECT employee_id, last_name, manager_id, 0 reportLevel, salary, job_id
FROM employees
WHERE manager_id is null
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id,
r.reportLevel+1 reportLevel, e.salary, e.job_id
FROM org_chart r, employees e
WHERE r.eid = e.manager_id
)
SEARCH DEPTH FIRST BY emp_last SET order1
SELECT lpad(' ',2*reportLevel)||emp_last emp_name, eid, mgr_id, salary, job_id
FROM org_chart
ORDER BY order1;
SELECT * FROM
(SELECT EXTRACT(YEAR FROM order_date) year, order_mode, order_total FROM orders)
PIVOT
(SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));
---------------------------
SELECT bk.attr_id AS attrId, group_concat(DISTINCT(bk.value_id)) AS attrValueStr, group_concat(DISTINCT(pt.name)) AS themeNameStr
FROM price_theme pt LEFT JOIN tl_spu_attr_value_rel_bk bk ON pt.spu_id = bk.spu_id
WHERE pt.status = 'action' AND pt.category_id = ?
GROUP BY bk.attr_id;
SELECT * FROM
(SELECT EXTRACT(YEAR FROM order_date) year, order_mode, order_total FROM orders)
PIVOT
(SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));
@@ -0,0 +1,12 @@
SELECT * FROM
(SELECT EXTRACT(YEAR FROM order_date) year, order_mode, order_total FROM orders)
PIVOT
(SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));
---------------------------
SELECT * FROM
(SELECT EXTRACT(YEAR FROM order_date) year, order_mode, order_total FROM orders)
PIVOT
(SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));