1

次の 4 つのテーブルがあります。

Store (
    row bigint,
    id uniqueidentifier,
    name varchar
)

Products (
    row bigint,
    id uniqueidentifier,
    storeID uniqueidentifier,
    productname varchar
)

Customer (
    row bigint,
    id uniqueidentifier,
    storeID uniqueidentifier,
    fName,
    lName,
    email
)

orders (
    row bigint,
    id uniqueidentifier,
    store_ID uniqueidentifier,
    cust_id uniqueidentifier,
    prod_id uniqueidentifier,
    date datetime
)

特定の店舗の注文テーブルで 30 のランダムな行を見つける必要があります。

これが私の最初の試みです:

  select TOP 30 * from orders o inner join store s on o.Retailer_ID=s.ID
    where s.Name='XXXX' and  o.Row in (select  ABS(CAST(CAST(NEWID() AS      
               VARBINARY) AS int)) %100000  from orders) and o.Retailer_ID =(select ID 
                  from store s where s.Name= 'XXXX')

しかし、行の範囲が1桁になることは決してないと感じており、行1から行最大までの実際の乱数を作成するのに、私が行うランダム計算はあまりうまくいかないように見えるため、結果には本当に満足していません-番号。そもそも注文テーブルに何行あるのか正確にはわかりませんが、これは別の問題になる可能性があります。

テーブル内のランダムな行を見つけるためのより良い方法はありますか?

4

2 に答える 2

4

物事ははるかに簡単です。

   select TOP 30 *
    from orders o 
         join store s on o.Retailer_ID=s.ID
    where s.Name='XXXX'
    order by newid()
于 2013-08-29T00:54:21.170 に答える