日期:2014-05-16 浏览次数:21268 次
IF ( SELECT COUNT(*)
     FROM   table1
   ) < 100 
    SELECT  *
    FROM    table1
ELSE 
    BEGIN
    ;
        WITH    tmp
                  AS ( SELECT   * ,
                                rn = ROW_NUMBER() OVER ( ORDER BY GETDATE() )
                       FROM     table1
                     )
            SELECT  *
            FROM    tmp
            WHERE   rn % 2 = 1
    END
------解决方案--------------------
declare @a int select @a=count(*) from tb if @a<=100 select * from tb else if @a>100 select * from (select *,row=row_number() over(order by id) from tb) where row%(@a/100)=1
------解决方案--------------------
declare @Total int
select @Total=COUNT(1) from tb
if @Total<=100
begin
    select * from tb
end
else 
begin
    ;with t
    (
        select 
            px=row_number()over(order by (select 1)),
            *
        from
            tb
    )
    select 
        [time],
        value
    from
        t
    where
        px%2=1
end
------解决方案--------------------
语句上可以实现,但效率极差!
建议还是直接在程序中实现。
比如在C语句中打开这个 select * from table1 ,可以先得到记录总数N,然后根据你的定义,算出间隔为或0,或1,或2。得到间隔X。
然后循环处理你的记录集,当 i++ % X ==0 的时候就输出记录即可。