Random MS Access中使用循环的合格随机选择?

Random MS Access中使用循环的合格随机选择?,random,selection,ms-access-2010,Random,Selection,Ms Access 2010,我使用的是Windows7,Access 2010 我有一个数据库,我需要从中返回一组随机记录。这些表是关系表 我有以下表格: 能力 元素 部分 例子 我用一个表达式创建了一个查询,该表达式对记录进行编号,我可以随机选择x个记录 问题是: 在元素中,我需要在每个元素中随机选择x个部分。因此,在我当前的设置中,我得到了x个部分,但它不包括每个元素中的至少一个部分。我想返回每个元素25%的部分 i、 e。 要素:7.1、7.2、7.3、7.4 第7.1.1、7.1.2、7.1.3节:7.2.1、

我使用的是Windows7,Access 2010

我有一个数据库,我需要从中返回一组随机记录。这些表是关系表

我有以下表格:

  • 能力
  • 元素
  • 部分
  • 例子
我用一个表达式创建了一个查询,该表达式对记录进行编号,我可以随机选择x个记录

问题是: 在元素中,我需要在每个元素中随机选择x个部分。因此,在我当前的设置中,我得到了x个部分,但它不包括每个元素中的至少一个部分。我想返回每个元素25%的部分

i、 e。 要素:7.1、7.2、7.3、7.4 第7.1.1、7.1.2、7.1.3节:7.2.1、7.2.2、7.3.3等

我的查询是随机返回的,但不是从每个元素返回的。所以我可能从元素7.1中得到了全部,从7.2中得到了1,从7.3或7.4中没有得到任何东西

有办法做到这一点吗?我想我可能需要一个循环,但我对它完全不熟悉,所以我需要适当的VBA代码来帮助它工作

我已经在谷歌上搜索了我能想到的所有东西,但我什么也没得到

任何帮助都将不胜感激


谢谢。

您应该能够使用“从组中选择n”类型的查询,但您需要一个唯一的ID:

SELECT
  t.ID, 
  t.Element, 
  t.Section
FROM Elements AS t
WHERE t.ID In (
     SELECT Top 2 ID 
     FROM Elements q 
     WHERE q.Element=t.Element 
     ORDER BY Rnd([id])*1000)
我已经讨论过很多次了,我认为您必须为随机排序添加一个字段,然后在运行查询之前更新该字段。这将更新[能力要素]中名为RandomNumber的字段

 UPDATE [Competency Elements] 
 SET [Competency Elements].RandomNumber = Rnd([element id])*1000;
然后百分比选择,我认为对于这个特定的数据集,它必须大于33:

SELECT Val([comp section number]) AS [Sect No],
       s.[section description],
       e.[element number],
       e.[element description],
       Rnd(e.[element id])        AS Expr1,
       s.[section id],
       e.[element id],
       x.example,
       s.[competency id],
       c.[comp number],
       c.[competency category]
FROM   competencies AS c
       INNER JOIN (([competency sections] AS s
                    INNER JOIN [competency elements] AS e
                            ON s.[section id] = e.[section id])
                   INNER JOIN examples AS x
                           ON e.[element id] = x.[element id])
               ON c.[competency id] = s.[competency id]
WHERE  (( ( e.[element id] ) IN (SELECT TOP 35 PERCENT [element id]
                                 FROM   [competency elements] q
                                 WHERE  q.[section id] = e.[section id]
                                 ORDER  BY randomnumber) ))
ORDER  BY Val([comp section number]); 

从一个组中随机选择有很多问题。

我有一个主键。如果我按原样写的话,“t”表示表格?我是否将该代码放在查询中?“*1000”的作用是什么?非常感谢你!我还需要将这些结果输入到我已经设置好的报告中。我假设这是一个查询返回,但我不确定。我以前从未将代码写入Access。
元素,因为t
表示别名(将名称t分配给此表)。您需要它,以便可以从元素q中再次引用内部SQL
中的元素,这些元素可以从元素q
中写入*1000,因为Rnd返回一个小的十进制数,所以乘以。是的,这是一个查询。如果名称是正确的
元素、ID、Section
等,您可以直接粘贴到查询设计窗口的SQL视图中。我不确定ID是什么?其他的名字是正确的。我尝试时出现了语法错误。