【问题标题】:create range using with cte in sql在 sql 中使用 with cte 创建范围
【发布时间】:2014-04-23 12:15:44
【问题描述】:

我有一个只有一列的表,其值如下所示

declare @numberrange table 
(
  num int 
)

insert into @numberrange (num) 
 values(24) ,
 (29) ,
( 34 ),
( 39 ),
( 44 ),
( 49 ),
( 54 ),
( 59  ),
( 64  ),
( 69  ),
( 74  ),
( 99 )

现在我想显示如下结果

24  24-29
29  30-34
34  35-39
39  40-44
44  45-49
49  50-54
54  55-59
59  60-64
64  65-69
69  70-74
74  75-99
99

我已尝试使用 sql cte 函数,但无法获得所需的结果。

【问题讨论】:

    标签: sql sql-server-2008-r2 common-table-expression


    【解决方案1】:

    您可以使用此 CTE 查询。查询从最后一条记录构建范围,因此最后一条记录的范围为空,而第一条记录的范围为空。

    ;with cte
    as
    (
        select top 1 num, sortorder, convert(varchar(21), null) rangevalue
        from (select num, ROW_NUMBER() over (order by num) as sortorder from @numberrange) x
        order by sortorder desc
    
        union all
    
        select x.num, x.sortorder, convert(varchar(10), x.num) + '-' + convert(varchar(10), cte.num)
        from (select num, ROW_NUMBER() over (order by num) as sortorder from @numberrange) x
        inner join cte
        on cte.sortorder = x.sortorder + 1
    )
    
    select num, rangevalue from cte
    order by num
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2021-08-11
      相关资源
      最近更新 更多