求一句SQL,有本事的請進
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




