如何在两个数字之间创建数字范围?

How to create numbers range of numbers between two numbers?

所以我有 Table 并且我有列 NumberMin(最小数)和 NumberMax(最大数) 我有很多记录,我想 select 所有数据,在新列中,我的数字介于最小值和最大值之间,就像这样 这是 table

ID Name NumberMin NumberMax 
13 Jhon 10        14

当我select我想成为这样

Name NumberMin NumberMax newcolum
Jhon 10        14        10
Jhon 10        14        11
Jhon 10        14        12
Jhon 10        14        13

我试过这段代码,但没有像这样工作

;with numcte  
AS  
(  
  SELECT NumbMin as[SEQUENCE]  
  UNION all  
  SELECT Name,NumbMin,NumbMax,[SEQUENCE] + 1 FROM Table WHERE NumbMin  <NumbMax 
)      
SELECT * FROM numcte

您的查询的问题是查询的锚点和递归部分必须具有相同的列数(和相同的数据类型)。你的锚点只有一列(numberMin),而递归部分有4列,所以查询错误。

考虑:

with numcte as (
    select id, name, numberMin, numberMax, numberMin newcol from mytable
    union all
    select id, name, numberMin, numberMax, newcol + 1
    from numcte
    where newcol < numberMax - 1
)
select * from numcte

where 条件阻止 newcol 的最后一个值实际达到 numberMax - 这有点不寻常,但这正是您想要的结果。

注意SQL服务器默认限制递归查询的迭代次数为100次,如果需要处理更多,需要在末尾添加option (maxrecursion 0)查询。

您可以使用递归 CTE 来执行此操作。

例如:

with
x as (
  select ID, Name, NumberMin, NumberMax, NumberMin as cur from t
  UNION ALL
  select ID, Name, NumberMin, NumberMax, cur + 1
  from x
  where cur < NumberMax - 1
)
select * from x

结果:

ID  Name  NumberMin  NumberMax  cur
--  ----  ---------  ---------  --- 
13  John         10         14   10
13  John         10         14   11
13  John         10         14   12
13  John         10         14   13

参见 DB<>Fiddle 中的 运行 示例。

另一种选择是临时计数 table。

不确定您是否要排除最高值 (14)。如果是这样,只需删除 Select top(...)

中的 +1

例子

Select A.* 
      ,NewColumn = NumberMin+B.N-1
 From  YourTable A
 Cross Apply (
                Select Top (NumberMax-NumberMin+1) N=row_number() Over (Order By (Select NULL)) From master..spt_values n1, master..spt_values n2
             ) B

Returns