2011-08-29 154 views
2

我的數據庫有5表格類別的分類。 我也有一個名爲「項目」的表,其中每個項目都有唯一的ID和類別ID FK。TSQL隨機選擇選擇標準

我需要從1個類別中隨機選擇10個項目。

如果只有1個類別,這不會有問題。但表格「項目」以非連續順序存儲類別ID。

下面的隨機選擇語句工作,並能夠在一個範圍內生成隨機ID。但是,我怎樣才能生成10個屬於同一類別的隨機ID?

Declare @maxRandomValue tinyint = 100 
    , @minRandomValue tinyint = 0; 

Select Cast(((@maxRandomValue + 1) - @minRandomValue) 
    * Rand() + @minRandomValue As tinyint) As 'randomNumber'; 

Defintions:

Table Categories 
ID INT 
Desc Varchar(100) 

Table Items 
ID Int 
CategoryID Int (fk) 
Desc Varchar(100) 
+0

是的,它是一個TSQL語句 –

+1

看看[隨機抽樣這個MSDN文章(http://msdn.microsoft.com/en-us/library/ aa175776%28v = sql.80%29.aspx) –

+0

'SELECT TOP 10 * FROM dbo.MyTable ORDER BY NEWID();'總是適合我。 – tugberk

回答

5
select top 10 * from items where categoryid = 1 order by newid() 
6

使用

  • 一個WHERE過濾到一個類別
  • NEWID以隨機化行
  • TOP給你限制在10個項目

所以:

SELECT TOP 10 
    * 
FROM 
    Items 
WHERE 
    CategoryID = @whatever 
ORDER BY 
    NEWID()