MS Access - TEXT 字段的排名

Posted

技术标签:

【中文标题】MS Access - TEXT 字段的排名【英文标题】:MS Access - Rank on TEXT fields 【发布时间】:2013-03-14 14:54:24 【问题描述】:

在 MS Access 2000 中,我有一个名为 [Stack Trace] 的表,我应该从中随机提取 400 条记录,其中一个文本列是不同的。 我查看了here 中的一个示例,并在表中添加了一个自动编号字段,并编写了如下查询:

假设 [Appraisal Name] 是所需的不同字段,ID 是自动编号的主键,那么应该通过什么查询来查找随机 400 条记录,其中一个文本字段具有不同的值?

第一个没有独特 [评估名称] 的查询。

SELECT Top 400 *
FROM   (SELECT *,
           Rnd(ID) AS RandomValue
        FROM  [Street Data])
ORDER  BY RandomValue ASC

我知道我可以通过 Rank 操作在 sql server 中轻松实现。我没有看到任何有用的链接来查找 varchar/text 字段的排名。我尝试使用以下查询查找排名。没有成功。

SELECT
    ID,
    [Appraiser Name],
    (
        SELECT COUNT(*)
        FROM [Street Data] WHERE
        [Appraiser Name] <= T.[Appraiser Name]
    ) AS Rank
FROM [Street Data] AS T
ORDER BY ID, [Appraiser Name]

感谢任何帮助。

【问题讨论】:

【参考方案1】:

我解决了一些方法。但是,如果有任何简单的方法可以做到这一点,我欢迎。我创建了三个查询。第一个查找 Appraiser Name 的等级,第二个查找 Appraiser Name 的不同,第三个是最终查询。我尝试使用 rank = 1 的查询中的第一个,它给了我 join not supported 错误。那很不好。当我创建另一个 rank = 1 的查询,然后在最后一个查询中使用它时,它起作用了。

StreetData_Appraiser

SELECT ID, [Appraiser Name], (
        SELECT COUNT([Appraiser Name])
        FROM [Street Data]
WHERE [Appraiser Name] = T.[Appraiser Name]
AND ID <= T.ID
    ) AS Rank
FROM [Street Data] AS T
ORDER BY ID, [Appraiser Name]

StreetData_Distinct_Appraiser(用于屏蔽第一个查询并仅显示不同记录并避免无效连接错误的查询)

SELECT * FROM StreetData_Appraiser WHERE Rank = 1

最终查询

SELECT TOP 400 *
FROM (SELECT ST.*,
           Rnd(ST.ID) AS RandomValue
        FROM  [Street Data] AS ST
        INNER JOIN [StreetData_Distinct_Appraiser] AS SA ON SA.ID=ST.ID)  AS STRecs
ORDER BY RandomValue

【讨论】:

以上是关于MS Access - TEXT 字段的排名的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2010 排名查询比较两列的唯一排名

在 C# 中使用 MS Access 查找字段

MS Access:突出显示 MS Access 报告中的特定字段

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

MS Access 应用程序需要登录用户/密码

在 MS ACCESS 中查找完成的字段百分比