SQL-更新a列中每个值的前n条记录,其中n = b列的计数

时间:2018-08-03 22:55:41

标签: sql ms-access

我有一张表,其中包含以下列和示例值:

    [test]
    ID | Sample | Org | EmployeeNumber
    1             100      6513241
    2             200      3216542
    3             300      5649841
    4             100      9879871
    5             200      6546548
    6             100      1116594

我基于[test]的示例计数查询返回这些按Org分组的样本值:

    Org | Count of EmployeeNumber
    100             3
    200             2
    300             1

我的问题是我可以使用此计数来更新test.Org 100的前3条记录,Org 200的前2条记录和Org 300的前1条记录采样到'x'吗?只要更新了Org的记录数= EmployeeNumber的数量,就更新哪个记录都没有关系。

我意识到我可以在此示例中更新所有记录,但是我有175个组织和900,000条记录,我的真实计数查询包含一个iif,该iif仅返回基于其他列的部分计数。

我要接管的数据库使用记录集和循环来更新。我试图在一个SQL更新语句中编写此代码。我已经尝试了几种嵌套选择语句的变体,但还不太清楚。任何帮助都会使我免于爆炸。谢谢!

1 个答案:

答案 0 :(得分:0)

假设id是该行的唯一ID,则可以使用相关子查询来选择共享当前组织的行中小于或等于当前行的行ID的计数标识并检查此计数是否小于或等于您要指定的组织记录的数量。

例如,要标记组织100的3条记录,您可以使用:

UPDATE test
       SET sample = 'x'
       WHERE org = 100
             AND (SELECT count(*)
                         FROM test t
                         WHERE t.org = test.org
                               AND t.id <= test.id) <= 3;

对于其他情况,则为模拟

(免责声明:我无权访问Access(ha,ha,pun),所以我无法对其进行测试。但是我想它已经足够基本,可以在几乎所有DBMS中使用,也可以在Access中使用。)