数据库里查出一列数据,例如1,2,3,4,5,8,9,10,15,16,17,18,这样子的怎么弄成1-5 8-10 15-18这种类型的
------解决思路----------------------
with t
as
(
select *,
row_number() over(order by number) rn
from test2
)
select case when min(number)=max(number) then cast(min(number) as varchar)
else cast(min(number) as varchar)+'~'+cast(max(number) as varchar) end as number
from t
group by number-rn
------解决思路----------------------
with test as
(select 1 as number union all
select 2 as id union all
select 3 as id union all
select 4 as id union all
select 5 as id union all
select 8 as id union all
select 9 as id union all
select 10 as id union all
select 15 as id union all
select 16 as id union all
select 17 as id union all
select 18 as id ),
t
as
(
select *,
row_number() over(order by number) rn
from test
)
select case when min(number)=max(number) then cast(min(number) as varchar)
else cast(min(number) as varchar)+'-'+cast(max(number) as varchar) end as number
from t
group by number-rn
--结果
number
-------------------------------------------------------------
1-5
8-10
15-18
(3 行受影响)