我在 sql server 2014 中有一个这样的表:
ID | Start_mile|End_mile
1 |5.23 |7.464
2 |2.333 |6.124
我想要做的是将英里分成每个 ID 的千分之一,如下所示:
ID |start_mile|end_mile
1 |5.230 |5.231
1 |5.231 |5.232
1 |5.232 |5.233
....
1 |7.463 |7.464
...
关于如何去做的任何想法?我试图远离 Cursors,除非这是唯一的方法。
我已经能够将这个查询放在一起,但不确定如何将它与我的 ID 和英里限制结合起来,以便它在没有声明的 From 和 To 变量的情况下运行整个表:
DECLARE @from decimal(15, 3) = 0.980;
DECLARE @to decimal(15, 3) = 1.024;
;WITH cte AS
(SELECT @from AS Value
UNION ALL
SELECT CONVERT(decimal(15, 3), Value + 0.001)
FROM cte
WHERE Value < @to)
SELECT *
FROM cte
option (maxrecursion 0)
如果您不想使用递归 CTE,您可以使用以下查询示例:
对于一个 id,这应该可以工作到6M英里。
spt 值表可以用某种数字表代替。
数据库<>小提琴
您只需要在锚点中引用初始起始值和结束值。
这是一种方法。这只是一种方式。有多种其他方法可以做到这一点,每种方法都会涉及一些循环和权衡,但一旦准备好这种方法,就不需要其他循环了。
其他可能的方法包括一个真实数字表(值从 0 到任何值)和额外的计算以确定顶部截止值,您的 CTE 版本嵌入到表值函数中,如下所示:
和许多其他人