Select 随机记录
Select random records
我有一个 table。它的链接(无主键)称为 "spcDB"。我需要根据 "area" 和 "location" 列随机 select 12 条记录。该区域有两个数值:“211”和“231”。我需要 select 8 - “211” 和 4 - “231” 记录。 "location" 中的每个值都是唯一的。
我写了这个VBA代码(moduleOne):
Function Randomizer() As Integer
Static AlreadyDone As Integer
If AlreadyDone = False Then Randomize: AlreadyDone = True
Randomizer = 0
End Function
..我的 SELECT 看起来像..
SELECT TOP 8 spcDB.LOC, spcDB.AREA_TYPE
FROM spcDB
WHERE randomizer() = 0 and spcDB.AREA_TYPE = "211"
ORDER BY rnd(isnull(spcDB.LOC) * 0 + 1);
SELECT TOP 4 spcDB.LOC, spcDB.AREA_TYPE
FROM spcDB
WHERE randomizer() = 0 and spcDB.AREA_TYPE = "231"
ORDER BY rnd(isnull(spcDB.LOC) * 0 + 1);
首先生成8对位置和211个区域。第二个 4 loc + 231 个区域。
我的问题是如何将这两个 select 合二为一?
如果您关闭并重新打开 Access,您的查询将使用相同的序列。
为避免这种情况,请向 Rnd 添加一个时间相关的种子,它会随着每个唯一 ID 的变化而变化:
SELECT TOP 8
spcDB.LOC,
spcDB.AREA_TYPE,
Rnd(-Timer()*spcDB.LOC) AS [Rnd Generator]
FROM
spcDB
WHERE
spcDB.AREA_TYPE = "211"
ORDER BY
Rnd(-Timer()*spcDB.LOC)
UNION ALL
SELECT TOP 4
spcDB.LOC,
spcDB.AREA_TYPE,
Rnd(-Timer()*spcDB.LOC) AS [Rnd Generator]
FROM
spcDB
WHERE
spcDB.AREA_TYPE = "231"
ORDER BY
Rnd(-Timer()*spcDB.LOC)
我有一个 table。它的链接(无主键)称为 "spcDB"。我需要根据 "area" 和 "location" 列随机 select 12 条记录。该区域有两个数值:“211”和“231”。我需要 select 8 - “211” 和 4 - “231” 记录。 "location" 中的每个值都是唯一的。
我写了这个VBA代码(moduleOne):
Function Randomizer() As Integer
Static AlreadyDone As Integer
If AlreadyDone = False Then Randomize: AlreadyDone = True
Randomizer = 0
End Function
..我的 SELECT 看起来像..
SELECT TOP 8 spcDB.LOC, spcDB.AREA_TYPE
FROM spcDB
WHERE randomizer() = 0 and spcDB.AREA_TYPE = "211"
ORDER BY rnd(isnull(spcDB.LOC) * 0 + 1);
SELECT TOP 4 spcDB.LOC, spcDB.AREA_TYPE
FROM spcDB
WHERE randomizer() = 0 and spcDB.AREA_TYPE = "231"
ORDER BY rnd(isnull(spcDB.LOC) * 0 + 1);
首先生成8对位置和211个区域。第二个 4 loc + 231 个区域。 我的问题是如何将这两个 select 合二为一?
如果您关闭并重新打开 Access,您的查询将使用相同的序列。 为避免这种情况,请向 Rnd 添加一个时间相关的种子,它会随着每个唯一 ID 的变化而变化:
SELECT TOP 8
spcDB.LOC,
spcDB.AREA_TYPE,
Rnd(-Timer()*spcDB.LOC) AS [Rnd Generator]
FROM
spcDB
WHERE
spcDB.AREA_TYPE = "211"
ORDER BY
Rnd(-Timer()*spcDB.LOC)
UNION ALL
SELECT TOP 4
spcDB.LOC,
spcDB.AREA_TYPE,
Rnd(-Timer()*spcDB.LOC) AS [Rnd Generator]
FROM
spcDB
WHERE
spcDB.AREA_TYPE = "231"
ORDER BY
Rnd(-Timer()*spcDB.LOC)