1

私はWindows7、Access2010を使用しています

ランダムなレコードのセットを返す必要があるデータベースがあります。テーブルはリレーショナルです。

私は次のテーブルを持っています:

  • コンピテンシー
  • 要素
  • セクション

レコードに番号を付ける式を使用してクエリを作成し、x個のレコードをランダムに選択することができました。

問題は次のとおりです。要素内で、各要素内のセクションのx個をランダムに選択する必要があります。したがって、現在の設定ではx個のセクションを取得しますが、各要素から少なくとも1つのセクションは含まれていません。各要素のセクションの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

「select n from group」タイプのクエリを使用できるはずですが、一意の 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]); 

グループからランダムに選択することに関しては、いくつかの問題があります。

于 2012-12-18T16:10:33.767 に答える