MS Access — Ранг в полях TEXT

В MS Access 2000 у меня есть таблица с именем [Stack Trace], из которой я должен случайным образом извлечь 400 записей, отличающихся от одного из текстовых столбцов. Я посмотрел на один из примеров в здесь и добавил поле autonumber в таблицу и написал запрос, как показано ниже:

Предположим, что [Имя оценки] — это необходимое отдельное поле, а ID — первичный ключ с автоматической нумерацией. Каким должен быть запрос для поиска случайных 400 записей с одним из текстовых полей, имеющим разные значения?

Первый запрос без отличительного [имя оценки].

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

Я знаю, что могу легко добиться этого на сервере sql с операцией Rank. Я не вижу никаких полезных ссылок, чтобы найти ранг в полях 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]

Любая помощь приветствуется.


person user007    schedule 14.03.2013    source источник


Ответы (1)


Я как-то решил. Но я приветствую, если есть какие-либо простые способы сделать это. Я создал три запроса. Первый, чтобы найти ранг имени оценщика, второй, чтобы найти отличие имени оценщика, а третий - окончательный запрос. Я попытался использовать первый в запросе с рангом = 1, и это дало мне ошибку соединение не поддерживается. Это плохо. Когда я создал еще один запрос с рангом = 1, а затем использовал его в финальном запросе, он сработал.

StreetData_оценщик

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
person user007    schedule 14.03.2013