我想查询数据库一张表内三分之一的数据。该如何查?而且,如果有增加了3条新纪录。。查询的结果只能比之前查询的结果多出一条记录!,如果增加了1条或2条记录,查询的结果过则不变。。一次类推。!!!在线等。着急啊。。各位高手快帮忙啊!!

解决方案 »

  1.   

    --SQL2005
    USE AdventureWorks ;
    GO
    SELECT TOP(30) PERCENT WITH TIES
    EmployeeID, Title, DepartmentID, Gender, BaseRate
    FROM HumanResources.Employee
    ORDER BY BaseRate DESC;
      

  2.   

    select top 33 percent * 
    from tb3分之一约等于33%
      

  3.   

    select top 30 percent * from tablename
      

  4.   

    select top 33.33 percent * from tablename
      

  5.   

    使用 TOP 和 PERCENT 限制结果集
    TOP 子句限制返回到结果集中的行数。TOP n [PERCENT]n 指定返回的行数。如果未指定 PERCENT,n 就是返回的行数。如果指定了 PERCENT,n 就是返回的结果集行的百分比,如下所示:TOP 120 /*Return the top 120 rows of the result set. */
    TOP 15 PERCENT /* Return the top 15% of the result set. */.如果一个 SELECT 语句既包含 TOP 又包含 ORDER BY 子句,那么返回的行将会从排序后的结果集中选择。整个结果集按照指定的顺序建立并且返回排好序的结果集的前 n 行。限制结果集大小的另一种方法是在执行一个语句之前执行 SET ROWCOUNT n 语句。SET ROWCOUNT 与 TOP 的不同之处在于: SET ROWCOUNT 限制适用对 ORDER BY 取值后在结果集中生成行。如果指定了 ORDER BY,SELECT 语句将在从某个已根据指定的 ORDER BY 分类进行了排序的值集中选择 n 行后终止。
    TOP 子句适用于指定了该子句的单个 SELECT 语句。在执行另一个 SET ROWCOUNT 语句之前,SET ROWCOUNT 会一直有效,例如执行 SET ROWCOUNT 0 将会关闭此选项。 
      

  6.   


      select top 33.3 percent * from wko_epmc
      

  7.   


    --测试数据
    declare @table table(id int)
    declare @i int
    set @i=1
    while @i<=12  --12的时候出4条,13的时候出4条,直到15个才出5条
    begin
    insert into @table 
    select @i
    set @i=@i+1
    enddeclare @k int
    select @k=count(*) from @table
    set @k=floor(@k/3)
    select top (@k) * from @table