首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle有没有内置的函数可以按照特定的顺序连接多个字段?

Oracle有没有内置的函数可以按照特定的顺序连接多个字段?
EN

Stack Overflow用户
提问于 2017-08-09 10:42:05
回答 3查看 312关注 0票数 2

我有一个包含以下列的表:

代码语言:javascript
运行
复制
Col1|Col2|Col3
C   |B   |A
B   |A   |C
A   |D   |B

并希望有一个以升序连接Col1、Col2和Col3中的值的查询。例如,上表的输出应为:

代码语言:javascript
运行
复制
Result
ABC
ABC
ABD

Oracle是否提供了以特定顺序聚合多个字段的内置函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-09 10:45:25

不是的。您可以使用least()greatest()case来执行此操作

代码语言:javascript
运行
复制
select least(col1, col2, col3) ||
       (case when col1 not in (least(col1, col2, col3), greatest(col1, col2, col3)) then col1
             when col2 not in (least(col1, col2, col3), greatest(col1, col2, col3)) then col2
             else col3
        end) ||
       greatest(col1, col2, col3)
票数 3
EN

Stack Overflow用户

发布于 2017-08-09 12:09:41

此查询将完成此工作,并且可以扩展到任意数量的列:

代码语言:javascript
运行
复制
Select Listagg(col_val) Within Group (Order By col_val) As sorted_col_values
From (Select col1, col2, col3, 
             rowid as row_id 
        From t)
Unpivot(col_val For col in (col1, col2, col3))
  Group By row_id;

取消透视运算符将每行的三列转换为三个不同的行,每行具有相同的行ID。Listagg函数与row_id上的Group By结合使用,可将每行的列值重新链接在一起,并按字母顺序排序。

我知道你在想什么,我同意:甲骨文太棒了!

票数 1
EN

Stack Overflow用户

发布于 2017-08-09 11:59:13

不能,但您可以通过现有工具的组合找到一种方法。

此方法使用UNION运算符将所有记录放入单个列中,同时将它们与它们所来自的ROWNUM相关联,然后使用LISTAGG函数将最终结果集中的组连接在一起。

代码语言:javascript
运行
复制
WITH view1 AS (SELECT ROWNUM AS rowid, col1 as col FROM table
UNION ALL
SELECT ROWNUM, col2 FROM table
UNION ALL
SELECT ROWNUM, col3 FROM table)
SELECT LISTAGG(col, '') WITHIN GROUP (ORDER BY col) OVER (PARTITION BY rowid) AS Result
FROM view1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45580833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档