ITPUB论坛 » MS SQL Server » 请教:如何高效的达到此过滤效果
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-7-1 22:19 icedot
请教:如何高效的达到此过滤效果

有一个数据表,其中的数据如下所示:
NO Name
1  高等数学(1)
2  高等数学(2)
3  大学语文(1)
4  大学语文(2)
5  英语
......
其中的数据有好几十万条,现在需要查询得到如下结果:
高等数学
大学语文
英语

即对于含有(1)(2)..的数据,只取第一条.
我目前采用的方法是:

select  replace(Name,'(1)','') Name where (right(Name,1)<>")" ) or (right(name,3)='1')

虽然能实现功能,但感觉效率不高,请教高手,有何更好的方式(注:含有(1)(2)..这种数据占总数据量的25%左右).

2008-7-1 22:52 bailiu2002
我暈
科目總共就那么几種 需要這樣嗎?

2008-7-1 23:01 smthgdin
select distinct tt.no,tt.name from (select no,case when right(name,1)=')'  then substring(name,1,len(name)-3) end as name from 表) as tt

试试这个看怎样。我觉得你的where从句性能很低。

2008-7-2 08:53 icedot
to bailiu2002
只是举的一个例子,实际数据有五十万条以上,当然有必要考虑效率问题

to smthgdin
谢谢,我试试

2008-7-2 09:37 smthgdin
我的第一层select 多了no字段 要去掉。

2008-7-2 13:36 icedot
to smthgdin
您的这个写法,和我的效果差不多.
不过这个还不是我最终要得到的结果,开始是想要把问题简化,所以把重要部分抽出来举的一个例子,不过看来还是不能简化,因为简化了,就偏离方向了.

实际问题是这样的.
有一个新闻的发布系统,里面有文章:

1.湖北秭归县开通“七一”关怀热线(1)
2.湖北秭归县开通“七一”关怀热线(2)
3.台湾"高考"考场另类现象:清凉辣妹送补品
4.虎照真是一个农民制造的谎言? (1)
5.虎照真是一个农民制造的谎言? (2)
6.王岐山强调加强奥运保障工作的责任感和紧迫感
7.分析称时代华纳出售AOL Google或损失5亿美元
8.钢筋水泥下的货币战争 沈阳是房地产世外桃源
....

现在要读取最新文章,或是读某个分类的文章.
像:

1.湖北秭归县开通“七一”关怀热线(1)
2.湖北秭归县开通“七一”关怀热线(2)
这类文章,就是一篇新闻,只是进行了分页,所以对于这类新闻,只读取第一页,且显示标题为:湖北秭归县开通“七一”关怀热线
对于新闻,还需要把它发表日期,链接地址(同一篇新闻的每一页的地址不同),分类读取出来.
还请指教,我的语句要如何优化,谢谢.

2008-7-2 14:47 smthgdin

你加多个序号字段可能就好解决了。
dstinct后,页面显示标题。点击进去就可以看到1,2,3。。。。

2008-7-2 18:10 smxzgh
表结构设计问题

2008-7-2 21:19 zikao419
select distinct tt.no,tt.name from (select no,case when right(name,1)=')'  then substring(name,1,len(name)-3) end as name from 表) as tt

这条语句好像不能满足“第一条”的条件吧

2008-7-5 09:48 Ryan-liumin
呵呵   我的追求简单 还没到追求性能的那个阶段

页: [1]


Powered by ITPUB论坛