我拥有的表格大约有1亿多个条目,默认情况下按“A”排序。可能有许多项目具有相同的列A,A从0增加到......大数字。我尝试过TABLESAMPLE,但它并没有从每个A号中选择一个好的数字,它会跳过其中的一些,或者说我没有使用它。所以我想从每个A号中选择相同数量的值。我希望所选行的总数是一个数字,比方说1000万,或者让它称之为B.
答案 0 :(得分:2)
虽然我不清楚你需要实现什么,但是当我需要在Parent和/或公共属性值之间分配得很好的大样本子集时,我这样做了:
SELECT *
FROM YourTable
WHERE (YourID % 10) = 3
这样做的另一个好处是,只需将“3”更改为另一个数字,即可获得另一个完全不同的样本。另外,您可以通过调整“10”来更改子样本大小。
答案 1 :(得分:1)
您可以使用NEWID()
:
SELECT TOP 100
*
FROM
YourTable
ORDER BY NEWID()
答案 2 :(得分:0)
@RBarryYoung解决方案是正确的,通用的,它适用于任何常量统计分布,如id序列(或任何自动增量列)。但有时,您的分发不是常量,或者您可能遇到性能问题(SQL Server必须扫描所有索引条目以计算WHERE子句)。
如果其中任何一个影响您的问题,请考虑可能符合您需求的内置T-SQL运算符TOP
:
SELECT TOP (30) PERCENT *
FROM YourTable;