回 帖 发 新 帖 刷新版面

主题:再次请教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个回复)

11 楼

这样遍历数据表一次,所以其效率、稳定性是很高的!

你还可以用 scan 语句,替代自定义函数,其结构比较简单,
适用在表单的方法中,但其效率稍微低些。

12 楼

cbl518老师,真是太感谢你了,多谢你多次的指导,没想还可以这样,已前没这样想过。但有一点,自定义函数如果是在程序的另一个位置定义如:MAIN.PRG(主程序中),在表单中调用此函数时,我想"nXh"是不是要定义成全局的变量才行啊?
    顺便再请你帮我指导一下我上面的思路行得通不?我用查询基本上生成了每条记录应有的“序号”值,但不知道用UPDATE怎么更新。

13 楼

你的程序运行错误!

每一个查询最少遍历一次数据表,你遍历了4、5次,效率太低了,
嵌套太多太深,数据容易发生错误的!,
再说你也违反了游戏规则!
来源表不但,都是来自子查询表,
而且同级的两个来源表,
同时来自子查询。

14 楼

[quote]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
[/quote]
学习后觉得很经典,可以修改后应用于多种替换操作.

我来回复

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