CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

求一句SQL,有本事的請進

楼主leotan_yang(Leotan)2004-05-04 11:40:57 在 MS-SQL Server / 疑难问题 提问

name             desc  
  a                           222  
  a                           3333  
  a                           2324  
  b                             lkjasdlf  
  b                           asdf  
  結果:  
   
  name             desc                         idnum  
  a                           222                     1  
  a                           3333                 2  
  a                           2324                   3  
  b                             lkjasdlf             1  
  b                           asdf                       2    
  誰知道這條sql如何寫?幫忙急? 问题点数:20、回复次数:27Top

1 楼zheninchangjiang(徐若涵)回复于 2004-05-04 11:46:00 得分 10

select   id=identity(int,1,1),*   into   #t   from   tablename  
  select   a.name,a.desc,idnum=(select   count(*)   from   #t   b   where   b.name=a.name   and   b.id<=a.id)   from   #t   aTop

2 楼txlicenhe(马可)回复于 2004-05-04 11:46:21 得分 6

select   *,(select   count(*)   from   表名   where   name   =   a.name   and   desc<=a.desc)   as   idnum  
  from   表名   a  
   
  --本事不够,错了不管。Top

3 楼8992026(8992026)回复于 2004-05-04 11:55:55 得分 0

回复人:   leotan_yang(Leotan)   (   )   信誉:95     2004-4-19   16:39:42     得分:0    
     
     
       
  我是求一條sql來實現呀,用這個方法我也會啦。能再想想嗎?  
  這樣速度會慢的,如果數據量大的話。請再想想  
   
   
       
     
  Top

4 楼leotan_yang(Leotan)回复于 2004-05-04 11:58:19 得分 0

在最優化的情況下,就是想一條sql語句完成這個功能。Top

5 楼leotan_yang(Leotan)回复于 2004-05-04 11:59:12 得分 0

to:   txlicenhe(马可)    
  你的sql有點問題,你再看清楚題目,謝謝你的回復!!Top

6 楼leotan_yang(Leotan)回复于 2004-05-04 11:59:38 得分 0

to:   zheninchangjiang(我爱燕子)  
  我只要一條sqlTop

7 楼zheninchangjiang(徐若涵)回复于 2004-05-04 12:01:27 得分 0

不好意思,那我就不会了。学习!Top

8 楼txlicenhe(马可)回复于 2004-05-04 12:04:09 得分 0

本事不到家,此题对我来说无解。Top

9 楼leotan_yang(Leotan)回复于 2004-05-04 12:06:05 得分 0

沒關係,大家研究Top

10 楼realgz(realgz)回复于 2004-05-04 12:22:53 得分 0

1、表上存在什么约束(允许重复否)?  
  2、idnum用什么规则生成?如果你告诉我是物理顺序,那建议再看看什么叫集合  
  Top

11 楼chludlf(春露)回复于 2004-05-04 12:29:44 得分 0

樓主高明,   自已用一條語句去解吧!Top

12 楼leotan_yang(Leotan)回复于 2004-05-04 12:29:50 得分 0

name             desc  
  a                           222  
  a                           3333  
  a                           2324  
  b                             lkjasdlf  
  b                           asdf  
  結果:  
   
  name             desc                         idnum  
  a                           222                     1  
  a                           3333                 2  
  a                           2324                   3  
  b                             lkjasdlf             1  
  b                           asdf                       2    
  誰知道這條sql如何寫?幫忙急?  
   
  沒樓上說得那麼復雜吧!!!再看看清楚Top

13 楼leotan_yang(Leotan)回复于 2004-05-04 12:31:43 得分 0

to:   chludlf(春露)  
  你這是什麼意思,我會的就不在這裡問啦,  
  看你自己說的是什麼話,真是的。要是你不會的你可以不要出聲。  
  真沒修養!!!!!!!!!Top

14 楼chludlf(春露)回复于 2004-05-04 12:32:01 得分 0

select   *,(select   sum(1)     from   表名   where   name   =   a.name   and   desc<=a.desc)   as   idnum  
  from   表名   a   order   by   name     ,   desc  
   
  Top

15 楼chludlf(春露)回复于 2004-05-04 12:35:18 得分 0

哈哈,樓主牌氣還滿大的Top

16 楼leotan_yang(Leotan)回复于 2004-05-04 12:41:18 得分 0

to:chludlf(春露)    
  我這樣就是直話直說,沒什麼的,你不得罪我,我也不會說什麼的!  
  你的sql與     txlicenhe(马可)   的sql發生同一個錯!  
   
   
  Top

17 楼realgz(realgz)回复于 2004-05-04 12:44:16 得分 0

楼主啊,马可的查询错在哪里?你怎么试的?Top

18 楼leotan_yang(Leotan)回复于 2004-05-04 12:51:18 得分 0

select   *,(select   count(*)   from   表名   where   name   =   a.name   and   desc<=a.desc)   as   idnum  
  from   表名   a  
   
   
  錯在desc<=a.desc,他沒看清楚,我不是按這個在排的。第一條就是1,第二條就是1,如此類推。Top

19 楼zheninchangjiang(徐若涵)回复于 2004-05-04 12:53:59 得分 1

那最好的办法就是,在企业管理器中设计那个表,增加一个idnum列,  
  再打开那个表,手动输入那么几个数字,我就只会这么一点了。进来了出不去:)Top

20 楼realgz(realgz)回复于 2004-05-04 12:59:02 得分 1

那就是按照物理顺序了,严重建议楼主再去复习下关系数据库的基础知识。  
  重点:行集。Top

21 楼leotan_yang(Leotan)回复于 2004-05-04 13:01:59 得分 0

create   table   table1(name1   varchar(20),desc1   varchar(20))  
  insert   table1   select   'a','222'  
  union   all   select   'a','3333'  
  union   all   select   'a','2324'  
  union   all   select   'a','lkjasdlf'  
  union   all   select   'a','asdf'  
   
  select   *   from   table1  
   
  SELECT     a.*   ,   (select   count(*)   from   table1   b     where   b.name1   =   a.name1     and   b.desc1<=a.desc1)   as   idnum  
  FROM       table1     a  
  drop   table   table1  
   
  你用這個sql去執行,看看結果是不是跟我要的結果一樣?是不是不一樣呢?Top

22 楼leotan_yang(Leotan)回复于 2004-05-04 13:07:09 得分 0

不好意思,剛才打錯了。  
  create   table   table1(name1   varchar(20),desc1   varchar(20))  
  insert   table1   select   'a','222'  
  union   all   select   'a','3333'  
  union   all   select   'a','2324'  
  union   all   select   'b','lkjasdlf'  
  union   all   select   'b','asdf'  
   
  select   *   from   table1  
   
  SELECT     a.*   ,   (select   count(*)   from   table1   b     where   b.name1   =   a.name1     and   b.desc1<=a.desc1)   as   idnum  
  FROM       table1     a  
  drop   table   table1  
  是這個才對。Top

23 楼zheninchangjiang(徐若涵)回复于 2004-05-04 13:31:42 得分 0

--真晕,就是这样的结果  
  (所影响的行数为   5   行)  
   
  name1                                 desc1                                  
  --------------------   --------------------    
  a                                         222  
  a                                         3333  
  a                                         2324  
  b                                         lkjasdlf  
  b                                         asdf  
   
  (所影响的行数为   5   行)  
   
  name1                                 desc1                                 idnum                
  --------------------   --------------------   -----------    
  a                                         222                                     1  
  a                                         3333                                   3  
  a                                         2324                                   2  
  b                                         lkjasdlf                           2  
  b                                         asdf                                   1  
   
  (所影响的行数为   5   行)  
  Top

24 楼8992026(8992026)回复于 2004-05-04 13:38:50 得分 2

马可早说过,你的要求一个语句实现不了  
  只有燕子的第一个回复能实现,多句的  
  Top

25 楼leotan_yang(Leotan)回复于 2004-05-04 13:39:46 得分 0

你看清楚我的結果要求:暈暈暈!!!這樣都看不出來!!!  
  name1             desc1                       idnum  
  a                           222                     1  
  a                           3333                   2  
  a                           2324                   3  
  b                             lkjasdlf         1  
  b                           asdf                   2    
  Top

26 楼leotan_yang(Leotan)回复于 2004-05-04 13:40:48 得分 0

to:8992026(8992026)  
   
  看來只有這樣羅,謝謝你!     結悵吧!Top

27 楼leotan_yang(Leotan)回复于 2004-05-04 13:51:25 得分 0

create   table   table1(name1   varchar(20),desc1   varchar(20))  
  insert   table1   select   'a','222'  
  union   all   select   'a','3333'  
  union   all   select   'a','2324'  
  union   all   select   'b','lkjasdlf'  
  union   all   select   'b','asdf'  
   
  select   *   from   table1  
   
  SELECT     a.*   ,   (select   count(*)   from   table1   b     where   b.name1   =   a.name1     and   b.desc1<=a.desc1)   as   idnum  
  FROM       table1     a  
  order   by   a.name1,a.idnum  
   
  drop   table   table1  
   
  這個就可以啦。Top

相关问题

  • 一句sql
  • 一句sql
  • 一句sql
  • 一句sql
  • 求一句SQL。
  • 求一句SQL
  • 求一句SQL
  • 求一句SQL
  • 一SQL语句?
  • 一句 sql !

关键词

  • sql
  • asdf
  • desc
  • select

得分解答快速导航

  • 帖主:leotan_yang
  • zheninchangjiang
  • txlicenhe
  • zheninchangjiang
  • realgz
  • 8992026

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo