简体   繁体   English

转换数字序列格式,使其带有连字符

[英]Convert number sequence format so that it is hyphenated

I have a sequence of numbers that need to be rendered with a hyphen but not sure how best to do this from the SQL database selection.我有一系列需要用连字符呈现的数字,但不确定如何从 SQL 数据库选择中最好地做到这一点。

The expected result:预期结果:

Peter: 1,3-7,10,11,13  
Andrew: 1-3  
Paul:   1-3  

An example of the data from the table (small selection):表中数据示例(小选):

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  

This is part gaps-and-islands and part string aggregation.这是部分间隙和岛屿和部分字符串聚合。 This identifies the groupings:这标识了分组:

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);

With this you can add an additional level of aggregation to get the final result:有了这个,您可以添加额外的聚合级别以获得最终结果:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM