2011-08-29 123 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()