T-SQL:如何检索总行数的1/2(基于某些标准)或50行?

时间:2010-08-13 08:43:19

标签: tsql

我想知道如何在T-SQL中检索 - 比方说 - 总行数的1/2来自表格(基于某些标准)甚至前50行(基于某些标准)?

4 个答案:

答案 0 :(得分:3)

选择前50行:

SELECT TOP 50 *
FROM table1
WHERE ...
ORDER BY ...

要选择结果集的前半部分,请使用PERCENT

SELECT TOP 50 PERCENT *
FROM table1
WHERE ...
ORDER BY ...

如果您希望结果一致,请记得添加ORDER BY。

答案 1 :(得分:2)

首先:

SELECT TOP 50 PERCENT a, b, c FROM table

第二

SELECT TOP 50 a, b, c FROM table

作为一项规则,除非您同时提供ORDER BY,否则不建议执行此操作(并且在那些完全可以正常工作以省略ORDER BY的情况下,您的代码将更易于理解且更易于修改如果你把它放在基础表的细节中。

分页(例如,返回y行的x块)在SQLServer中比许多其他SQL语言关系数据库更麻烦(说实话,比所有这些更麻烦),但可以使用ROW_NUMBER完成:

WITH OrderedTable AS
(
  SELECT a, b, c, ROW_NUMBER() OVER (ORDER BY d) as rowNumber
  FROM table
)
SELECT a, b, c FROM OrderedTable
WHERE rowNumber between 31 and 40

将选择按行d排序的第十组十行。

当限制来自变量时,也需要后一种方法,因为TOP不允许使用TOP @number。

答案 2 :(得分:1)

使用SQL TOP Clause

SQL Server语法

 SELECT TOP number|percent column_name(s)
   FROM table_name

 example : 

   SELECT TOP 50 PERCENT * FROM tablename

MySQL语法

SELECT column_name(s)
FROM table_name
LIMIT number

Oracle语法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

答案 3 :(得分:1)

以下是在MS SQL 2005和2008中的工作

select top 50 PERCENT * from x