You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Julian Hyde (Jira)" <ji...@apache.org> on 2020/01/21 21:31:00 UTC
[jira] [Created] (CALCITE-3752) PIVOT and UNPIVOT
Julian Hyde created CALCITE-3752:
------------------------------------
Summary: PIVOT and UNPIVOT
Key: CALCITE-3752
URL: https://issues.apache.org/jira/browse/CALCITE-3752
Project: Calcite
Issue Type: Bug
Reporter: Julian Hyde
Oracle SQL has PIVOT and UNPIVOT operators for cross-tab support.
For [example|https://oracle-base.com/articles/11g/pivot-and-unpivot-operators-11gr1],
{noformat}
SELECT *
FROM (SELECT customer_id, product_code, quantity
FROM pivot_test)
PIVOT (SUM(quantity) AS sum_quantity FOR (product_code) IN ('A' AS a, 'B' AS b, 'C' AS c))
ORDER BY customer_id;
CUSTOMER_ID A_SUM_QUANTITY B_SUM_QUANTITY C_SUM_QUANTITY
----------- -------------- -------------- --------------
1 10 20 30
2 40 50
3 60 70 80
4 100
4 rows selected.
{noformat}
In Calcite we could implement this as a prepare-time rewrite, something like this:
{noformat}
SELECT customer_id,
SUM(DECODE(product_code, 'A', quantity, 0)) AS a_sum_quantity,
SUM(DECODE(product_code, 'B', quantity, 0)) AS b_sum_quantity,
SUM(DECODE(product_code, 'C', quantity, 0)) AS c_sum_quantity
FROM pivot_test
GROUP BY customer_id
ORDER BY customer_id;
{noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)