首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SQL中的序列按ASC顺序排序

如何将SQL中的序列按ASC顺序排序
EN

Stack Overflow用户
提问于 2016-12-21 16:38:53
回答 1查看 109关注 0票数 0

我希望了解如何在SQL中排序序列,以便删除任何重复的值。

例如,如果我有以下数据集:

代码语言:javascript
复制
Set_of_skills
ABC/DEF/GHI
DEF/GHI/ABC
GHI/ABC/DEF

我运行了以下查询:

代码语言:javascript
复制
SELECT distinct set_of_skills FROM Table1;

这将带回我理解的所有这些行,但我想做的是按升序排列技能,因为这将给我以下内容:

代码语言:javascript
复制
Set_of_skills_1
ABC/DEF/GHI
ABC/DEF/GHI
ABC/DEF/GHI

现在,如果我要运行一个不同的查询,这将告诉我,所有这些实际上是相同的技能,而不是3个不同的技能。

如果有人能建议我如何做到这一点,我会很感激的。

提前谢谢。

更新:

因为我有一个数据规范化的表,所以如果我的表中的数据如下所示:

代码语言:javascript
复制
AGENT_ID | Set_of_skills
1 | ABC
1 | DEF
1 | GHI
2 | DEF
2 | GHI
2 | ABC
3 | GHI
3 | ABC
3 | DEF

是否需要对技能列进行排序,然后将其放入字符串中,以便确定我在整个团队中拥有的确切的不同技能?

EN

回答 1

Stack Overflow用户

发布于 2016-12-21 16:58:33

下面是一个使用正则表达式、分层查询和listagg()的快速解决方案。尽管如此,您确实应该修复您的数据模型。

例如,您可以使用内部查询(没有外部查询)来简单地规范当前数据。

代码语言:javascript
复制
with
     test_data ( Set_of_skills ) as (
       select 'ABC/DEF/GHI' from dual union all
       select 'DEF/GHI/ABC' from dual union all
       select 'GHI/ABC/DEF' from dual
     )
--   end of test data; SQL query begins below this line
select set_of_skills,
       listagg(token, '/') within group (order by token) as ordered_set_of_skills
from   ( select set_of_skills, 
                regexp_substr(set_of_skills || '/', '([^/]*)/', 1, level, null, 1) as token
         from   test_data
         connect by level <= 1 + regexp_count(set_of_skills, '/')
                and prior set_of_skills = set_of_skills
                and prior sys_guid() is not null
       )
group by set_of_skills
;

SET_OF_SKILLS        ORDERED_SET_OF_SKILLS
-------------------- -----------------------
ABC/DEF/GHI          ABC/DEF/GHI
DEF/GHI/ABC          ABC/DEF/GHI
GHI/ABC/DEF          ABC/DEF/GHI

3 rows selected.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41267715

复制
相关文章

相似问题

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