回 帖 发 新 帖 刷新版面

主题:再次请教SQL语句问题?

我有一个表如:
   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个回复)

沙发

通过一条UPDATE语句,可能不能达到你要的效果。

板凳

不是可以UPDATE 加SELECT查询来完成更新数据吗?
如:

update 表名 SET 列名=(SELECT*FROM 表名..............)

这样的格式有什么要求,我试了一下,提示有多条结果.就没法修改了.

3 楼

cbl518老师,我有这样一个想法,可不可以通过SELECT查询生成一个结果中带有此要求的列(不一定是指定的序号,可以是查询中新增加的列),然后再用UPDATE来完成行不行?

4 楼

到现在我只知道这样来达到目的
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 楼

这样效率太低!
不要用循环!
就用 repl 语句 + 自定义函数,效率会比查询还高。

6 楼

自定义函数?怎么写?

7 楼

用 FUNCTION 啊!
你先看看帮助文档!
今天我还有事情!

8 楼

哦,谢谢cbl518老师,老师不过我不是问自定义函数怎么写,是问你上面这个问题所要用到自定义函数怎么写,你有事情,你先忙你的,我自己先想一下!

9 楼

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 楼

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

我来回复

您尚未登录,请登录后再回复。点此登录或注册