将多行加入单行而不进行聚合 [Oracle]
Posted
技术标签:
【中文标题】将多行加入单行而不进行聚合 [Oracle]【英文标题】:Joining multiple rows into a single row without aggregation [Oracle] 【发布时间】:2020-01-21 14:30:53 【问题描述】:我有以下疑问:
select type,
date,
amount
from table;
它给出了以下结果:
TYPE DATE AMOUNT
--------------------------------
A 30.6.2019 15
B 30.11.2019 20
C 22.12.2019 17
我想做的是编写一个返回以下内容的查询:
TYPE1 DATE1 AMOUNT1 TYPE2 DATE2 AMOUNT2 TYPE3 DATE3 AMOUNT3
------------------------------------------------------------------------------------------------------
A 30.6.2019 15 B 30.11.2019 20 C 22.12.2019 17
第一个查询的行数始终为 3 且不超过此数。 我无法连接,因为我需要最终结果集中的多个列。 这可以在不使用 PL/SQL 的情况下在 Oracle SQL 中完成吗?
【问题讨论】:
是否有固定的行数或者需要对数百万行执行此操作? 对不起,我应该把它放到帖子里,我要编辑它。它总是 3 行 【参考方案1】:如果你知道你有三列,枚举它们并聚合:
select max(case when seqnum = 1 then type end) as type1,
max(case when seqnum = 1 then date end) as date1,
max(case when seqnum = 1 then amount end) as amount1,
max(case when seqnum = 2 then type end) as type2,
max(case when seqnum = 2 then date end) as date2,
max(case when seqnum = 2 then amount end) as amount2,
max(case when seqnum = 3 then type end) as type3,
max(case when seqnum = 3 then date end) as date3,
max(case when seqnum = 3 then amount end) as amount3
from (select t.*, rownum as seqnum
from t
) t;
如果不知道返回的列数,则需要使用动态 SQL (execute immediate
)。
【讨论】:
以上是关于将多行加入单行而不进行聚合 [Oracle]的主要内容,如果未能解决你的问题,请参考以下文章