首页 > 解决方案 > 有没有办法随机存储行并使这些存储桶具有相似的值?

问题描述

我目前在 dbo.loans 表中标记了许多贷款。此表在 [loan_tag] 字段中标记贷款,在 [sub_bin] 字段中标记子存储桶。现在我正在尝试使用随机选择的贷款创建子存储桶,但也具有相似的账面价值。使用类似于下面的查询选择/更新新字段没有问题

使用类似于以下的查询选择/更新新字段没有问题:

UPDATE DBO.LOANS SET SUB_BIN = "SUB-BUCKET2" WHERE CAPS_HEDGE IN ( SELECT TOP 10000 CAPS_HEDGE FROM DBO.LOANS WHERE SUB_BIN IS NULL AND LOAN_TAG = "PARENT_BUCKET" ORDER BY NEWID() )

如果有 50,000 条记录,我可以运行 5 次,每次运行都更改子存储桶名称。

我现在需要的是确保各个存储桶具有相似的总账面价值,这是 dbo.loans 中的另一个字段名称。通过运行 5 次,它会给我 5 个具有相同记录数的子存储桶,但不同且随机的 book_values。

有谁知道我怎么能做到这一点?此外,有没有办法让这个运行 N 次并针对所有不同的父存储桶名称?

标签: sqlsql-server

解决方案


如果要分配一个账面价值大致相等的随机箱,则按顺序为账面价值分配一个数字并取每个第 n 个:

with toupdate as (
      select l.*, row_number() over (order by book_value) as seqnum
      from loans l
     )
update toupdate
    set sub_bin = seqnum % 5;

推荐阅读