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

问题描述:

我有一个数字(比如100,000)。我想在15,000到19,900的给定时间间隔内分配这个数字。我预计结果将在15,000到19,900之间。我需要一个SQL查询/函数来完成这项任务。SQL查询在给定的时间间隔内分割数字

例子: 如果我需要15000个19900的结果区间之间的分裂100000应该是这样的:

15100.00 
16750.00 
19365.22 
18254.85 
15987.65 
14542.28 

请看到所有这些值的总和等于事先100000个 感谢。

+5

你能提供一些例子吗?目前还不清楚你试图达到什么目标。 – cairnz 2011-04-05 10:19:56

+0

我不明白这个问题。你可以添加一个你想如何工作的例子吗? – JenEriC 2011-04-05 10:20:50

+0

您期待的结果是什么? – 2011-04-05 10:23:45

如果最后选择的数字不需要在您指定的范围内(如您的示例所示),以下操作会返回一些随机数字,总和为给定的总数。

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   
+3

给你信贷的东西,似乎完全没有意义解决:) – cairnz 2011-04-05 12:06:32

+0

@ cairnz,哈哈。 OP似乎并没有频繁访问SO,但他可能确实为他的问题提供了一些信息。 – 2011-04-05 12:21:44

+0

非常感谢,这是我的预期。 – Nagesh 2011-04-05 13:12:51