您的位置:程序门 -> web 开发 -> asp



一个关于top percent的难题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


一个关于top percent的难题[已结贴,结贴人:tangqiaojie]
发表于:2007-03-03 14:01:05 楼主
我想在取得集合前百分之20%后,只要取   行数   整数部分的行

就是说例如   表中有12行,前20%就是2.4行,然后我只取2行

但是使用top   20   percent   后,会取得3行,这个应该怎么解决呢?
1)不想使用先取总行数再查询的方法
2)现在我是先取反序排的前80%,然后用not   in的,但是这个方法太麻烦了一点

。。。。。
发表于:2007-03-03 14:09:301楼 得分:1
直接用行数。先计算再取行数。
发表于:2007-03-03 17:12:482楼 得分:0
这样要连接两次啊
发表于:2007-03-07 10:33:513楼 得分:0
up
发表于:2007-03-07 11:04:594楼 得分:0
select   top   (case
      when   convert(int,   (select   count(*)   from   表)   *   0.2)   >   0   then   convert(int,   (select   count(*)   from   表)   *   0.2)
      else   1   end)   *
from   表
发表于:2007-03-07 14:36:575楼 得分:0
这个好象和我的意思不一样把,我是要取小于   行数的20%的   最大整数
=====================================================
而且好象出错哦,是不是不能这样用的啊?
==================================================
服务器:   消息   170,级别   15,状态   1,行   1
第   1   行:   '( '   附近有语法错误。
服务器:   消息   170,级别   15,状态   1,行   2
第   2   行:   '* '   附近有语法错误。
服务器:   消息   170,级别   15,状态   1,行   2
第   2   行:   '* '   附近有语法错误。
发表于:2007-03-07 14:50:276楼 得分:0
我现在是这样做的,我想可能这样比较好理解,就是想看看有没有好办法,例如设置一下之类的,让top的百分比取的是整数部分(全舍去),而不是全进位
select   ...   from   table_a   as   a1     where   a1.id   not   in   (select   top   80   percent   a2.id   from   table_a   as   a2   where   ...   order   by   a1.a1   asc,a1.a2   desc)   and   ...   order   by   a1.a1   desc,a1.a2   asc
发表于:2007-03-07 16:34:337楼 得分:0
select   top   (case   when   convert(int,   (select   count(*)   from   表)   *   0.2)   >   0   then   convert(int,   (select   count(*)   from   表)   *   0.2)   else   1   end)   *   from   表

我测试通过.怎么可能出错?   和你的意思是一样的.
发表于:2007-04-27 09:59:138楼 得分:0
select   top   (case   when   convert(int,   (select   count(*)   from   表)   *   0.2)   >   0   then   convert(int,   (select   count(*)   from   表)   *   0.2)   else   1   end)   *   from   表

我测试通过.怎么可能出错?   和你的意思是一样的.

===============================================
关键是如果*0.2后小于一条,那么一条也不取

发表于:2007-04-27 12:34:239楼 得分:0
加条件:   计数*0.2后大于1
发表于:2007-04-27 16:43:1010楼 得分:0
呃,不太明白,能不能写全,而且用这个方法要进行两次合计,好象不划算
发表于:2007-04-27 19:30:0711楼 得分:19
那你就写存储过程呗.
发表于:2007-04-29 14:11:3712楼 得分:0
写存储过程就不用合计?


快速检索

最新资讯
热门点击