我有一个表,需要填充值,这些值使用给定的步骤大小递增。此外,我也有一个范围的概念,以便一定数量的步骤将适合范围内(不一定是均匀的)。一旦射程结束,循环过程就需要发生.扭转的是,我还需要数一数我做了多少次循环,一旦达到给定的最大的循环,我需要重新设置我的循环的计数。由于这是令人困惑的,下面是一个例子。
让我们创建并填充一个简单的表:
IF OBJECT_ID('tempdb..#mytable') IS NOT NULL DROP TABLE
tempdb.dbo.#mytable
CREATE TABLE #mytable (
id INT IDENTITY(1,1),
iteration INT,
step INT
)
INSERT #mytable
DEFAULT VALUES
GO 20现在,让我们声明一些变量,并使用它们更新表中的数据(注意,没有使用@max_iterations变量,因为我不知道如何利用它,也不知道为什么要问我的问题):
DECLARE @step_size INT = 7,
@max_iteration_range INT = 40,
@max_iterations INT = 2
UPDATE #mytable
SET iteration = (id*@step_size)/@max_iteration_range,
step = (id*@step_size)%@max_iteration_range
SELECT * FROM #mytable以下是结果输出:
id iteration step
----------- ----------- -----------
1 0 7
2 0 14
3 0 21
4 0 28
5 0 35
6 1 2
7 1 9
8 1 16
9 1 23
10 1 30
11 1 37
12 2 4
13 2 11
14 2 18
15 2 25
16 2 32
17 2 39
18 3 6
19 3 13
20 3 20我想要解决的问题反映在最后三行。由于我的@max_iterations变量被设置为2,一旦我在“迭代”列中超过了这个值,我希望返回到0并重新开始。最后三行应该是:
id iteration step
----------- ----------- -----------
18 0 6
19 0 13
20 0 20对于如何做到这一点,我非常感激。
谢谢!
P.S.这个问题源于需要生成SQL Agent作业计划,这些计划的间隔是均匀的,但运行频率必须不少于每小时一次,等等。因此,我不能继续增加开始时间。
发布于 2015-08-16 16:23:22
再次感谢弗拉基米尔提供公式!完成我需要的事情的正确方法是:
DECLARE @step_size INT = 7,
@max_iteration_range INT = 40,
@max_iterations INT = 2
UPDATE #mytable
SET
iteration = ((id*@step_size)/@max_iteration_range) % (@max_iterations+1),
step = (id*@step_size)%@max_iteration_range
SELECT * FROM #mytablehttps://dba.stackexchange.com/questions/111117
复制相似问题