问题描述
你好,
我的测试表中有3列,比如
有什么方法可以将基于列1的列2和3合并为一个单独的行。结果应该是
我的测试表中有3列,比如
NAME | DATE | TOTAL_SALES ---------- ---------------------------- TOM | 01/12/2020 | 8 TOM | 02/12/2020 | 9 TOM | 03/12/2020 | 4 GEORGE | 01/12/2020 | 6 GEORGE | 02/12/2020 | 5
有什么方法可以将基于列1的列2和3合并为一个单独的行。结果应该是
NAME | 01/12/2020 | 02/12/2020 | 03/12/2020 | -------- --------------- -------------- -------------- TOM | 8 | 9 | 4 | GEORGE | 6 | 5 | 0 |
专家解答
你可以枢转!
将日期值转换为列标题是棘手的,因为:
* 您需要先将它们转换为字符值,然后再在in子句中使用它们
* 它们可能每次都会更改,这意味着您需要一个动态的枢轴。对此没有简单的解决方案。
有关更多信息,请阅读:
https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot
with rws as (
select mod ( level, 2 ) val,
date'2020-12-01' + mod ( level, 3 ) dt
from dual
connect by level <= 5
), formatted as (
select val, to_char ( dt, 'yyyy-mm-dd' ) dt
from rws
)
select * from formatted
pivot (
count (*) for dt in (
'2020-12-01' as d1,
'2020-12-02' as d2,
'2020-12-03' as d3
)
);
VAL D1 D2 D3
1 1 1 1
0 0 1 1 将日期值转换为列标题是棘手的,因为:
* 您需要先将它们转换为字符值,然后再在in子句中使用它们
* 它们可能每次都会更改,这意味着您需要一个动态的枢轴。对此没有简单的解决方案。
有关更多信息,请阅读:
https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




