SQL查询在给定的时间间隔内拆分数字

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,提前感谢.

Lie*_*ers 7

如果最后选择的数字不需要在您指定的范围内(根据您的示例),则以下将返回一些随机数总和为给定的总数.

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)

  • 给你一些似乎完全没有意义的东西的学分:) (3认同)