我有一個名為 Values 的表,其中包含數千條記錄。除了某些記錄共享相同的 ID 之外,資料本身是唯一的。
所以我需要一個查詢來從 Values 表回傳隨機記錄,但基于“TestQ2”查詢。例如,ID 120 應回傳 3 個隨機記錄。對于 ID 123(5 個隨機記錄),我需要相同的 ID,對于其他 ID,依此類推。
我在網上找到了一些例子,但沒有任何依賴于查詢值的例子。
圖示:“值”表是原始資料。“TestQ2”查詢告訴我為該特定“ID”回傳多少隨機行。在右邊,是我希望得到的回報。每次運行查詢時回傳隨機記錄。

這是我所能得到的:
SELECT TOP 5 Values.ID, Values.Test, Values.State, Rnd([Values]![ID]) AS [Random No], * FROM [Values] ORDER BY Rnd([Values]![ID]);
uj5u.com熱心網友回復:
TOP N 在查詢物件中不能是動態的。
可以計算一個組序列 ID 并在標準中使用它來為每個 ID 組回傳許多記錄。這需要一個可以提供自動編號的唯一識別符號欄位。將其設定為隨機,以便在將記錄添加到資料集時選擇會有所不同。
考慮 SQL:
SELECT Values.PKID, Values.ID, Values.Test, Values.State, DCount("*","Values","ID=" & [Values].[ID] & " AND PKID<" & [PKID]) 1 AS GrpSeq
FROM TestQ2 INNER JOIN [Values] ON TestQ2.ID = Values.ID
WHERE (((DCount("*","Values","ID=" & [Values].[ID] & " AND PKID<" & [PKID]) 1)<=[TestQ2].[Test]));
但是,如果您確實需要在每次查詢運行時回傳隨機記錄集,我預計將需要 VBA。使用每個 ID 組的隨機序列號填充值表中的欄位或使用隨機資料集填充臨時表。考慮用 VBA 來填充欄位:
Sub RandomSeq()
Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset, x As Integer
Set rs1 = CurrentDb.OpenRecordset("SELECT DISTINCT ID FROM [Values]")
Do While Not rs1.EOF
Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM [Values] WHERE ID=" & rs1!ID & " ORDER BY Rnd([Values]![ID]);")
Do While Not rs2.EOF
rs2.Edit
x = x 1
rs2!GrpSeq = x
rs2.Update
rs2.MoveNext
Loop
rs2.Close
x = 0
rs1.MoveNext
Loop
End Sub
現在運行查詢:
SELECT Values.ID, Values.Test, Values.State, Values.GrpSeq
FROM TestQ2 INNER JOIN [Values] ON TestQ2.ID = Values.ID
WHERE (((Values.GrpSeq)<=[TestQ2].[Test]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336032.html
標籤:sql ms-access ms-access-2010
上一篇:Oraclesql-案例
下一篇:C#無效列名問題但與其他人不同
