2011-04-05 84 views
0

我有一個數字(比如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

回答

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

相關問題