首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换数字序列格式,以便将其连字符

转换数字序列格式,以便将其连字符
EN

Stack Overflow用户
提问于 2019-11-26 11:22:38
回答 1查看 49关注 0票数 1

我有一系列需要用连字符表示的数字,但不确定如何最好地通过SQL数据库选择来实现这一点。

预期结果:

代码语言:javascript
复制
Peter: 1,3-7,10,11,13  
Andrew: 1-3  
Paul:   1-3  

表中的数据示例(小选择):

代码语言:javascript
复制
NAME     #
Peter   1  
Andrew  1   
Paul    1  
Andrew  2  
Paul    2  
Peter   3  
Andrew  3  
Paul    3  
Peter   4  
Peter   5  
Peter   6   
Peter   7  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-26 11:29:26

这部分是空白和岛屿,部分字符串聚合。这就确定了以下几类:

代码语言:javascript
复制
select name,
       (case when min(number) = max(number)
             then convert(varchar(max), min(num))
             else concat(min(number), '-', max(number))
        end) as range
from (select name, number,
             row_number() over (partition by name order by number) as seqnum
      from t
     ) t
group by name, (number - seqnum);

使用此方法,您可以添加一个额外的聚合级别以获得最终结果:

代码语言:javascript
复制
select name,
       string_agg(range, ',') within group (order by min(min_number)) as col
from (select name, min(number) as min_number,
             (case when min(number) = max(number)
                   then convert(varchar(max), min(num))
                   else concat(min(number), '-', max(number))
              end) as range
      from (select name, number,
                   row_number() over (partition by name order by number) as seqnum
            from t
           ) t
      group by name, (number - seqnum)
     ) n
group by name;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59049828

复制
相关文章

相似问题

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