[英]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.