当前位置: 代码迷 >> Sql Server >> 如何取出一列数据中不连续的值的起止值
  详细解决方案

如何取出一列数据中不连续的值的起止值

热度:25   发布时间:2016-04-24 09:54:38.0
怎么取出一列数据中不连续的值的起止值
数据库里查出一列数据,例如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 行受影响)
  相关解决方案