Tsql 在单个范围内生成随机数,这些随机数总和为一个值
我正在尝试自动生成一大组测试数据,我正在努力理解如何生成所需的一组随机值 我需要创建一组发生在不同范围内的随机值。根据测试用例,结果值的总和必须大于或小于预定值 比如说,Tsql 在单个范围内生成随机数,这些随机数总和为一个值,tsql,random,range,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 A = 100 B =
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
A = 100
B = 200
C = 300
D = 100
如果值之和必须小于800,则将使用有效的解决方案
A = 200
B = 400
C = 500
D = 100
A = 100
B = 200
C = 300
D = 100
只能使用优化功能解决此问题吗?是否有其他方法计算ABCD的值
我希望使用SQL解决这个问题,但我也希望听到一种伪代码方法。生成4个随机数,a、B、C、D 求和,等于E
按E/所需总数缩放A、B、C、D。再试一次,直到你得到你想要的
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
我认为您指的是总计/E,但这仍然不起作用,因为缩放可能会使ABCD的值低于或高于最小/最大值。例如,目标为700的A=300、B=400、C=600、D=100将导致D=50小于最小值100。。。您必须小心选择要比较的值。最好事先使用MinValue或MaxValue进行一些检查。