我有一个这样的列:
ID
--------
1
2
3
4
5
7
10
Run Code Online (Sandbox Code Playgroud)
我想获得以下结果集:
ID
--------
1-5
7
10
Run Code Online (Sandbox Code Playgroud)
有没有办法只用(Oracle)SQL来实现这个目的?
是:
select (case when min(id) < max(id)
then cast(min(id) as varchar2(255)) || '-' || cast(max(id) as varchar2(255))
else cast(min(id) as varchar2(255))
end)
from (select id, id - rownum as grp
from t
order by id
) t
group by grp
order by min(id);
Run Code Online (Sandbox Code Playgroud)
这是一个演示它的SQL小提琴.
查询背后的想法是rownum从数字序列中减去导致常数.您可以使用常量进行分组.