我需要根据子查询中的记录数返回表中的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()
答案 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()