Nag*_*esh 0 sql sql-server-2005
我有一个数字(比如100,000).我想在15,000和19,900的给定间隔之间分割这个数字.我预计结果将在15,000到19,900之间.我需要一个SQL查询/函数来完成这项任务.
示例:如果我需要在15,000和19,900的间隔之间拆分100,000,结果应如下所示:
15100.00
16750.00
19365.22
18254.85
15987.65
14542.28
Run Code Online (Sandbox Code Playgroud)
请注意,所有这些值的总和等于100,000,提前感谢.
如果最后选择的数字不需要在您指定的范围内(根据您的示例),则以下将返回一些随机数总和为给定的总数.
DECLARE @LowBound FLOAT
DECLARE @HighBound FLOAT
DECLARE @Total FLOAT
SET @LowBound = 15000
SET @HighBound = 19900
SET @Total = 100000
;WITH q AS (
SELECT [Value] = @LowBound + (@HighBound - @LowBound) * RAND(CHECKSUM(NEWID()))
, [RunningTotal] = CAST(0.00 AS FLOAT)
UNION ALL
SELECT [Value] = @LowBound + (@HighBound - @LowBound) * RAND(CHECKSUM(NEWID()))
, [RunningTotal] = CAST((q.[RunningTotal] + [Value]) AS FLOAT)
FROM q
WHERE q.[RunningTotal] < @Total
)
SELECT CASE WHEN [RunningTotal] < @Total
THEN [Value]
ELSE [Value] - ([RunningTotal] - @Total)
END AS Result
FROM (
SELECT [Value]
, [RunningTotal] = [Value] + [RunningTotal]
FROM q
) q
WHERE [RunningTotal] - [Value] <= @Total
Run Code Online (Sandbox Code Playgroud)