我有一個數字(比如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個 感謝。
我有一個數字(比如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個 感謝。
如果最後選擇的數字不需要在您指定的範圍內(如您的示例所示),以下操作會返回一些隨機數字,總和爲給定的總數。
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
你能提供一些例子嗎?目前還不清楚你試圖達到什麼目標。 – cairnz 2011-04-05 10:19:56
我不明白這個問題。你可以添加一個你想如何工作的例子嗎? – JenEriC 2011-04-05 10:20:50
您期待的結果是什麼? – 2011-04-05 10:23:45