0

MS Access 2000 には、[スタック トレース] という名前のテーブルがあり、そこから 400 のレコードをランダムに引き出して、テキスト列の 1 つを区別する必要があります。ここにある例の 1 つを見て、テーブルに autonumber フィールドを追加し、クエリを次のように記述しました。

[評価名] が必要な個別のフィールドであり、ID が自動採番された主キーであると仮定すると、テキスト フィールドの 1 つが個別の値を持つランダムな 400 レコードを検索するためのクエリは何になるでしょうか?

Distinct [評価名] を使用しない最初のクエリ。

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

ランク操作を使用してSQLサーバーで簡単に達成できることを私は知っています。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]

どんな助けでも大歓迎です。

4

1 に答える 1

0

なんとか解決しました。でも、簡単にできる方法があればよろしくお願いします。3 つのクエリを作成しました。1 つ目は Appraiser Name のランクを見つけるためのもので、2 つ目は Appraiser Name の固有のものを見つけるためのもので、3 つ目は最終的なクエリです。ランク = 1 のクエリで最初のものを使用しようとしましたが、結合がサポートされていないというエラーが発生しました。それは悪いことです。ランク = 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
于 2013-03-14T15:22:51.507 に答える