2017-09-26 32 views

回答

1

您可以使用遞歸CTE之間的範圍內:

with cte as (
     select @from as val 
     union all 
     select cast(val + 0.01 as decimal(15,2)) 
     from cte 
     where density < @to 
    ) 
select val 
from cte 
option (MAXRECURSION 0); 

注意:如果要插入的行數超過100行,則需要查看最大遞歸選項。

你也可以用「數字」表做類似的事情。

+0

的數字表的方法是TGE WSY去。使用遞歸CTE計算lile這非常非常有用。注意tgis文章:http://www.sqlservercentral.com/articles/T-SQL/74118/ –

+0

只有簡單的查詢是可能的嗎? –

+0

如果我的from大於 –

2

嘗試:

DECLARE @From DECIMAL (15,2) = 19.99; 
DECLARE @To DECIMAL (15,2) = 20.02; 
DECLARE @Step DECIMAL (15,2) = 00.01; 
DECLARE @R TABLE (Value DECIMAL(15,2)); 

WHILE @From <= @To 
    begin 
     INSERT INTO @R VALUES (@From); 
     SET @From = @From + @Step; 
    End 
SELECT * 
FROM @R; 

結果:

+=======+ 
| Value | 
+=======+ 
| 19,99 | 
+-------+ 
| 20,00 | 
+-------+ 
| 20,01 | 
+-------+ 
| 20,02 | 
+-------+ 

使用CTE

DECLARE @From DECIMAL (15,2) = 19.99; 
DECLARE @To DECIMAL (15,2) = 20.02; 
DECLARE @Step DECIMAL (15,2) = 00.01; 

WITH CTE AS(
    SELECT @Step * 1 Val 
     UNION ALL 
    SELECT @Step * 2 
     UNION ALL 
    SELECT @Step * 3 
     UNION ALL 
    SELECT @Step * 4 
    ) 
    SELECT @From - @Step + CTE.Val Value FROM CTE; 

結果:

+=======+ 
| Value | 
+=======+ 
| 19,99 | 
+-------+ 
| 20,00 | 
+-------+ 
| 20,01 | 
+-------+ 
| 20,02 | 
+-------+ 
3

您可以使用理貨/號碼的方式對這個像下面

DECLARE @from DECIMAL(10,2) , @to DECIMAL(10,2), @interval DECIMAL(10,2) 

SET @from=19.99 
SET @to= 20.02 
SET @interval=0.01 
SELECT @from +r*@interval 
FROM 
(
SELECT TOP (SELECT CAST((@[email protected])/@interval AS INT)+1) 
ROW_NUMBER() OVER(ORDER BY (SELECT 1)) -1 r 
FROM 
sys.objects s1 CROSS JOIN sys.objects s2 
)T 

Working demo

+0

Msg 1060,Level 15,State 1,Line 9 TOP子句中的行數必須是整數。 –

+0

@Thebeginner更新。 – DhruvJoshi

+0

這個工作,但我們可以簡化這個查詢? –