2013-03-14 51 views
0

在MS Access 2000中,我有一个名为[堆栈跟踪]从我应该随机拉400个记录具有鲜明的文本列一个表。 我看着在here一个例子,并增加了自动编号字段表和写如下面的查询:的MS Access - 文本字段排名

假设[评价名]是所需的不同字段和ID是autonumbered主键,又该查询是否可以查找其中一个文本字段具有不同值的随机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] 

任何帮助表示赞赏。

回答

0

我解决了一些问题。但是,如果有任何简单的方法可以做到这一点,我很欢迎。我创建了三个查询。第一个找到评估师姓名的排名,第二个找到评估师姓名的区别,第三个是最终查询。我试图使用排名= 1的查询中的第一个,它给了我加入不支持错误。那很不好。当我创建了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