如何根据子查询中的计数选择记录数

时间:2017-08-03 13:24:51

标签: sql sql-server

我需要根据子查询中的记录数返回表中的X个记录。

例如,如果MYTABLE中的TOP 80%记录等于275条记录,那么我想从另一张表中选择275条记录。

这可以通过简单的动态SQL完成,而不需要创建变量等吗?

我的前任写了这样的话:

DECLARE @RecordVariable int

SET @RecordVariable =
(SELECT COUNT(*) * .8 
FROM MYTABLE)

SELECT TOP (@RecordVariable) *
FROM
MYOTHERTABLE
ORDER BY NEWID()

2 个答案:

答案 0 :(得分:6)

您可以将查询嵌套在TOP ()

SELECT TOP (Select cast(count(*)*.8 as int) From MYTABLE) *
FROM MYOTHERTABLE
ORDER BY NEWID()
  

编辑 - 加速随机选择

这是使用TABLESAMPLE

提高速度的一种方法
SELECT TOP (Select cast(count(*)*.8 as int) From MYTABLE) *
FROM MYOTHERTABLE
TABLESAMPLE (10000 ROWS)  -- could be (50 PERCENT)
ORDER BY NEWID()

这将基本上采用100,000行的随机块(根据需要改变),然后通过NewID()返回前N个顺序

答案 1 :(得分:6)

也不需要动态SQL,我不会想。

select top (select cast((count(*) * .8)as int) from YourTable) 
* from YourTable
order by NEWID()