2012-12-18 93 views
1

我正在使用Windows 7,Access 2010使用循环MS Access中的合格随机选择?

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

我有以下表:

  • 胜任
  • 元素
  • 实例

我创建具有该编号的记录的表达的查询,我能够随机选择x个记录。

问题是: 在元素内,我需要随机选择每个元素中x个节的数量。因此,按照我目前的设置,我可以获得x个部分,但它不包含每个元素中的至少一个部分。我想从每个元素中返回25%的部分。

即 元素: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代码才能使它工作。

我搜索了一切我能想到的,我没有得到任何地方。

任何帮助将不胜感激!

谢谢。

回答

0

您应该能够使用“选择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]); 

有许多关于从一个组中随机选择的问题。

+0

我有一个主键。如果我这样写,那么“t”意味着表?我是否将该代码放入查询中? “* 1000”做什么?非常感谢! – user1912877

+0

我还需要将这些结果提供给我已经设置的报告。我假设这是一个查询返回,但我不确定。我从来没有在Access中写过代码。 – user1912877

+0

'元素作为t'意味着一个别名(将名字t赋给这个表)。您需要它,以便您可以在内部SQL'FROM Elements q'中再次引用元素,该元素可以写为'FROM Elements AS q''。* 1000因为Rnd返回一个小数,所以乘以。 – Fionnuala