mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
支持Pivot
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@165 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user