主题:再次请教SQL语句问题?
hw2007name
[专家分:4790] 发布于 2008-08-03 23:26:00
我有一个表如:
ID号(I) 序号 (I) 摘要(C (254)) 日期(D) .....
123 0 ADB 2008.01.02
123 0 BGH 2008.01.02
123 0 23H 2008.01.02
23 0 地ADB 2008.01.02
23 0 dBGH 2008.01.02
23 0 f23H 2008.01.02
896 0 HJFG 2008.01.07
896 0 FHFH 2008.01.07
56 0 FDGHJFG 2008.01.07
56 0 FHG76FH 2008.01.07
1209 0 ADB 2008.03.02
1209 0 BGH 2008.03.02
1209 0 23H 2008.03.02
现在想通过一条UPDATE语句达到如下效果:
ID号(I) 序号 (I) 摘要(C (254)) 日期(D) .....
123 1 ADB 2008.01.02
123 2 BGH 2008.01.02
123 3 23H 2008.01.02
23 1 地ADB 2008.01.02
23 2 dBGH 2008.01.02
23 3 f23H 2008.01.02
896 1 HJFG 2008.01.07
896 2 FHFH 2008.01.07
56 1 FDGHJFG 2008.01.07
56 2 FHG76FH 2008.01.07
1209 1 ADB 2008.03.02
1209 2 BGH 2008.03.02
1209 3 23H 2008.03.02
我对SQL语句刚接触不久,还望各位多指导哈.
回复列表 (共14个回复)
沙发
cbl518 [专家分:57140] 发布于 2008-08-04 01:27:00
通过一条UPDATE语句,可能不能达到你要的效果。
板凳
hw2007name [专家分:4790] 发布于 2008-08-04 08:38:00
不是可以UPDATE 加SELECT查询来完成更新数据吗?
如:
update 表名 SET 列名=(SELECT*FROM 表名..............)
这样的格式有什么要求,我试了一下,提示有多条结果.就没法修改了.
3 楼
hw2007name [专家分:4790] 发布于 2008-08-04 08:42:00
cbl518老师,我有这样一个想法,可不可以通过SELECT查询生成一个结果中带有此要求的列(不一定是指定的序号,可以是查询中新增加的列),然后再用UPDATE来完成行不行?
4 楼
hw2007name [专家分:4790] 发布于 2008-08-04 08:51:00
到现在我只知道这样来达到目的
SELECT DISTINCT ID号 FROM 表名 INTO CURSOR "TIM1"
FOR I=1 TO RECCOUNT("TIM1")
GOTO I IN "TIM1"
nNowID=TIM1.ID号
SELECT RECNO() AS RE1,* FROM (SELECT * FROM 表名 WHERE ID号=nNowID) AS A1 INTO CURSOR "TIM2"
UPDATE 表名 SET 序号=TIM2.RE1 WHERE 表名.ID号=TIM2.ID号 &&这一句是不是还差点什么?
ENDFOR
5 楼
cbl518 [专家分:57140] 发布于 2008-08-04 09:04:00
这样效率太低!
不要用循环!
就用 repl 语句 + 自定义函数,效率会比查询还高。
6 楼
hw2007name [专家分:4790] 发布于 2008-08-04 09:25:00
自定义函数?怎么写?
7 楼
cbl518 [专家分:57140] 发布于 2008-08-04 09:29:00
用 FUNCTION 啊!
你先看看帮助文档!
今天我还有事情!
8 楼
hw2007name [专家分:4790] 发布于 2008-08-04 09:51:00
哦,谢谢cbl518老师,老师不过我不是问自定义函数怎么写,是问你上面这个问题所要用到自定义函数怎么写,你有事情,你先忙你的,我自己先想一下!
9 楼
hw2007name [专家分:4790] 发布于 2008-08-04 10:58:00
SELECT查询加UPDATE:
SELECT REN-MIN AS NINDEX,* FROM ;
(SELECT min(ren) AS mir,ID号 ;
FROM ((SELECT RECNO() AS REN,* FROM 表名) as A1 GROUP BY 记帐id ORDER BY 1) B1,;
SELECT RECNO() AS REN,* FROM 表名) as A2 ;
WHERE B1.ID号=A2.ID号;
INTO CURSOR "TIM1"
UPDATE 表名 SET 序号=TIM1.NINDEX WHERE TIM1.ID号=表名.ID号
&&怎么不会全部修改,只修改了当前TIM1对应的ID号记录?????
10 楼
cbl518 [专家分:57140] 发布于 2008-08-04 13:54:00
SELECT emp1
INDEX ON id号 TO id号
GO 1
nXh=id号
i=0
REPLACE ALL 序号 WITH xh(id号)
FUNCTION xh(n1)
IF nXh=n1
i=i+1
ELSE
i=1
nXh=n1
ENDIF
RETURN i
我来回复