【问题标题】:TSQL Random Select with Selective Criteria带有选择性标准的 TSQL 随机选择
【发布时间】:2011-08-29 13:28:13
【问题描述】:

我的数据库在“类别”表中有 5 个类别。 我还有一个名为“items”的表,其中每个项目都有唯一的 Id 和一个类别 Id FK。

我需要从 1 个类别中随机选择 10 个项目。

如果只有 1 个类别,这不会有问题。但是表“items”以非顺序存储类别ID。

下面的随机选择语句有效并且能够在一个范围内生成随机 ID。但是如何生成 10 个属于同一类别的随机 ID?

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

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

定义:

Table Categories
ID INT
Desc Varchar(100)

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

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

使用

  • 过滤到某个类别的 WHERE
  • NEWID 随机化行
  • TOP 将您限制为 10 项

所以:

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

【讨论】:

    【解决方案2】:
    select top 10 * from items where categoryid = 1 order by newid()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      相关资源
      最近更新 更多