我有一个我的sql返回的数据
node_no code value1 order
100 AB 001 1
100 AB 007 2
101 AB 010 3
我必须使用sql进一步处理这些数据,以获得类似的输出
node_no code value1 value2
100 AB 001 007
101 AB 010 null
要求是 display a column value from two rows(or rows with same node_no) into a single row as two different columns . 必须保持订单 .
注意:这可能看起来像SQL Query to concatenate column values from multiple rows in Oracle SQL Query to concatenate column values from multiple rows in Oracle的副本
但是我们将值显示为单个聚合列 .
2 回答
试试这个:
SQLFiddle
请注意,这假设您的
value1
字段是varchar2
,因此如果您想要执行除标准词典编排之外的某些自定义排序,则需要在order by
子句中自行实现 .下面在@MatBailie的评论中提出的另一个解决方案消除了对连接的需要(仍然需要CTE):
最新版本的Oracle也支持
PIVOT
子句 . 但是,您仍然需要获得一个常量列标识符:(我将
order
重命名为ordering
,因为前者是保留字,需要转义/应尽可能避免)...将像@ Shree的回答一样,根据节点对所有行进行编号 . 这意味着我们每个部分都有一个恒定值:
此时,它变成了标准的
PIVOT
查询:(
PIVOT
需要一个聚合函数,但在这种情况下我们没有任何要聚合的东西,所以...)SQL小提琴示例
不过,我不确定这是否比现有答案更有效 .