生成总和为某个值的各个范围内的随机数

时间:2011-01-17 14:24:34

标签: tsql random range

我正在尝试自动生成大量测试数据,我正在努力了解如何生成一组所需的随机值。

我需要创建一组在不同范围内出现的随机值。根据测试用例,结果值的总和必须大于或低于预定值。

例如,

Value | Minimum value | Maximum Value
A | 100 | 300
B | 200 | 500
C | 300 | 600
D | 100 | 300

如果值的总和必须大于800,则有效的解决方案将是

A = 200
B = 400
C = 500
D = 100

如果值的总和必须小于800,则有效的解决方案将是

A = 100
B = 200
C = 300
D = 100

这个问题只能通过优化功能解决吗?有没有其他方法来计算ABCD的值?

我希望使用SQL解决这个问题,但也有兴趣听一下伪代码方法。

2 个答案:

答案 0 :(得分:2)

尝试再试一次,直到得到你想要的东西。

declare @T table (Value char(1), MinValue int, MaxValue int)
insert into @T values('A', 100, 300)
insert into @T values('B', 200, 500)
insert into @T values('C', 300, 600)
insert into @T values('D', 100, 300)

declare @R table (Value char(1), Rnd int)

declare @Sum int

while 0=0
begin
    delete @R
    insert into @R
    select Value, round(((MaxValue - MinValue -1) * rand() + MinValue), 0) as Rnd
        from @T

    select @Sum = sum(Rnd) from @R
    if @Sum > 800
        break
end

select *, @Sum
from @R

答案 1 :(得分:0)

生成4个随机数,A,B,C,D。

求和,= E

按E /期望总数对A,B,C,D进行比例。