1

我正在使用 Windows 7、Access 2010

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

我有以下表格:

  • 能力
  • 元素
  • 部分
  • 例子

我使用对记录进行编号的表达式创建了一个查询,并且能够随机选择 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 代码帮助才能让它工作。

我用谷歌搜索了所有我能想到的东西,但我一无所获。

任何帮助将不胜感激!

谢谢你。

4

1 回答 1

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)

我已经经历过很多次了,我认为您将不得不为随机排序添加一个字段,然后在运行查询之前更新该字段。这将更新 [Competency Elements] 中名为 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]); 

There are a number of issues around getting a random selection from a group.

于 2012-12-18T16:10:33.767 回答