我有兩個值有十進制(15,2)數據類型返回兩個十進制值之間的所有值
例如。
@from='19.99'
和
@to='20.02'
我不得不返回兩個值
預期輸出 - 19.99, 20.00, 20.01, 20.02
我有兩個值有十進制(15,2)數據類型返回兩個十進制值之間的所有值
例如。
@from='19.99'
和
@to='20.02'
我不得不返回兩個值
預期輸出 - 19.99, 20.00, 20.01, 20.02
您可以使用遞歸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行,則需要查看最大遞歸選項。
你也可以用「數字」表做類似的事情。
嘗試:
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 |
+-------+
您可以使用理貨/號碼的方式對這個像下面
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
Msg 1060,Level 15,State 1,Line 9 TOP子句中的行數必須是整數。 –
@Thebeginner更新。 – DhruvJoshi
這個工作,但我們可以簡化這個查詢? –
的數字表的方法是TGE WSY去。使用遞歸CTE計算lile這非常非常有用。注意tgis文章:http://www.sqlservercentral.com/articles/T-SQL/74118/ –
只有簡單的查詢是可能的嗎? –
如果我的from大於 –