1

SQL Server 2008 を使用しています。ランダムな行レコードを選択したいのですが、レコードの総数は別のテーブルの列の値に依存します。これを行う方法を教えてください。

私のSQL文はこのようなものですが、間違っています..

select top b.number a.name, a.link_id 
from A a 
left join B b on b.link_id = a.link_id 
order by newid()

これが私のテーブルと期待される結果です。

表A

name   link_id 
james  100
albert 100
susan  100
simon  101
tom    101    
fion   101

表 B :

link_id   number
100       2
101       1

期待される結果:

  • 初めて実行すると、結果は次のようになります。

    name   link_id
    james  100
    susan  100
    fion   101
    
  • 2 回目の結果は次のようになります。

    albert 100
    susan  100
    simon  101
    
  • 3 回目は次のようになります。

    james  100
    albert 100
    fion   101
    

説明

表 B 参照、link_id: 100、数値: 2

テーブルAが2つのランダムレコードを選択する必要があることを意味しますlink_id = 100

1 つのランダムなレコードを選択する必要がありますlink_id=101

4

2 に答える 2

2

ROW_NUMBER() 関数を使用できます。

SELECT A.name, A.link_id
FROM(
SELECT name,link_id, ROW_NUMBER()OVER(PARTITION BY link_id ORDER BY NEWID()) rn
FROM dbo.tblA
) AS A
JOIN dbo.tblB AS B
ON A.link_id = B.link_id
WHERE A.rn <= B.number;

これを実際に示す SqlFiddle を次に示します: http://sqlfiddle.com/#!3/92eac/2

于 2013-01-12T18:03:50.877 に答える
0

これを試して:

SELECT  a.*
FROM    b
CROSS APPLY
        (
        SELECT  TOP (b.number) a.*
        FROM    a
        WHERE   a.link_id = b.link_id
        ORDER BY
                NEWID()
        ) a

参照: SQLFiddle

于 2013-01-12T18:05:48.003 に答える