【发布时间】:2020-09-11 18:11:40
【问题描述】:
我有一个表格,数据如下:
a | b | c | d
a | b | c | e
a | b | c | f
g | h | i | j
g | h | i | k
g | h | i | l
我想将数据转换如下:
a | b | c | d | e | f
g | h | i | j | k | l
尝试如下。但它没有用。
select col1, col2, col3,
rtrim(xmlagg(xmlelement(e, col4 || ',')).extract ('//text()'), ',') val
from TABLEA
group by col1, col2, col
你能帮我解决这个问题吗?
【问题讨论】:
-
由于表中的行没有以任何特定方式排序(即使在查看它们时它们可能似乎是有序的),不清楚您是如何决定的
d应该放在第四列,e在第五列,f在最后一列。你怎么决定呢?或者你不在乎 - 任何订单都可以? -
那么:对于前三列的每一个不同组合,输入中是否总是恰好有三个不同的行(导致恰好需要另外三列)?如果前三列中具有相同三个值的行数可以变化,那么问题甚至没有意义 - 您需要澄清要求,因为在关系数据库中,输出中的所有行都必须具有列数相同。
标签: sql oracle pivot oracle12c window-functions