我正在尝试加载一个表,其中包含基于另一个表随机生成的值。问题是 final 的结果集Cross Join
对于最终交叉连接表的每一行都不是唯一的(随机的)。
解构 CTE
; with MinMax as -- Step one get the range of values for each `DetailCategoryId`
(
select distinct DetailCategoryId,
min(DetailId) over(partition by DetailCategoryId) as [Min]
, max(DetailId) over(partition by DetailCategoryId) as [Max]
from Ref.Detail
)
, RandProcess as -- Step two pick a random number between the range for each
(
select MM.DetailCategoryId
, (MM.[Min] + FLOOR(RAND() * (MM.[Max] + 1 - MM.[Min]))) as Rando
from MinMax MM
)
最后一步是创建一个交叉引用表,Cross JOIN
该表将为RandProcess
每个项目提供集合。.
select PRJ.ProjectId, RD.DetailCategoryId, RD.Rando
from info.Project PRJ
CROSS JOIN RandProcess RD
问题是表中的每组数据PRJ
都是相同的。这是每组PRJ
数据的前两行。
10000 101 7
10000 102 10
...
10001 101 7
10001 102 10
...
10002 101 7
10002 102 10
问题
对于 PRJ 的每一行,如何使每个 PRJ 集都不同(随机)?
10000 101 7
10000 102 10
...
10001 101 4
10001 102 11
...
10002 101 1
10002 102 14
为什么
我的目标是将这些值作为每个PRJ
数据元素的测试值插入到另一个表中。
RAND()
被评估一次,因此所有行都得到相同的值。你可以用它
newid()
来模拟一个随机值。checksum()
将其转换为整数并abs()
返回绝对值。进入您所需的最小和最大范围更改您的
RandProcess
cte