有一表(三个字段)Km_id,Km_name,flag(bit型) 假设有如下数据:
101 现金
102 银行存款
102001 工行
102002 XXX
103 XXXXX
104 AAAAAA
... .......
怎样通过一个update 语句实现将最低级科目的标志flag赋值-1(默认为0,参考字段为km_id),其中的关键字段为km_id
更新后的数据如:
101 现金 -1
102 银行存款 0
102001 工行 -1
102002 XXX -1
103 XXXXX -1
104 AAAAAA ..
... ....... ..
101 现金
102 银行存款
102001 工行
102002 XXX
103 XXXXX
104 AAAAAA
... .......
怎样通过一个update 语句实现将最低级科目的标志flag赋值-1(默认为0,参考字段为km_id),其中的关键字段为km_id
更新后的数据如:
101 现金 -1
102 银行存款 0
102001 工行 -1
102002 XXX -1
103 XXXXX -1
104 AAAAAA ..
... ....... ..
解决方案 »
- 如何限制其它窗体最大化范围
- ★★ daisy8675(莫依)是女的吗?那大家可要照顾一点啦★★
- 有一个想法,用APPSERVER接口来传文件!
- DELPHI里如何实现分组统计?
- 请问高手在delphi中如何些sql语句实现逻辑备份oracle数据库????
- //***背景大调查!***//
- 关于DateTime字段 在sqlserver2000下的问题---(20)
- 如何写任务栏运行的程序?
- Installshield 6.3使用6.2的语言包,汉化不彻底,怎么办
- 一个 FORM 含多个 PANNEL 尺寸不同如何在切换时不闪烁
- 100分購買treeview源碼
- 请问如何实现类似delphi中project-option窗体中的窗体列表的功能。
update tablename set flag = -1 where km_id <> '102' ;你用where km_id not in ( '102',....)
或km_id >...., km_id <...都可以
可能你理解错了,也有可能是我给的数据误导了你
最低级科目必须满足条件,km_id 不能存在如下关系:
如果有km_id ='101',则只要存在km_id='101%'均不是最低级科目
//%为通配符
而且表中的数据并不一定是我列举的那样,可能数据如下:
1011 现金
1021 银行存款
10021001 工行
1021002 XXX
1031 XXXXX
1041 AAAAAA
... .......
那又该如何呢!也就是说where 后面的条件不能是特定的值
那就在条件中试一下吧,查找左三个字符是101的吧。
你用的是什么数据库,对应的函数不一样。。
在vfp中有%通配符,和left()
update tablename set flag=-1 where left(km_id,3)<>"101"
或者用substring(km_id from 1 to 3)<>"101" 这个函数是delphi数据库的
我使用的是Sql Server ,其条件不一定是'101'开头的,应该是km_id中的值必须满足该值如果在其它条记录中不存在包含关系(%,尾部)才赋值-1,否则为0,如同将班级中姓名中前面部分或全部相同的归为0,只有前面部分或全部完全不相同才为-1
update tablename set flag = -1 where len(km_id)>3
最低级科目必须满足该值如果在其它条记录中不存在包含关系(%,尾部)才赋值-1,否则为0,如同将班级中姓名中前面部分或全部相同的归为0,只有前面部分或全部完全不相同才为-1
或者
update tablename a set flag = -1 where .a.(select 1 from tablename b where b.km_id=substr(a.km_id,length(a.km_id)-3,length(a.km_id)))
update tablename a set flag = -1 where substr(a.km_id,length(a.km_id)-3,length(a.km_id)))
in(select b.km_id from tablename b where b.km_id=substr(a.km_id,length(a.km_id)-3,length(a.km_id)))
谢谢先,需要说明的是,KM_ID的长度,也就是说length(a.km_id)-3这个条件不一定存在!
UPDATE KM A
SET FLAG = -1
WHERE NOT EXISTS(
SELECT * FROM KM B
WHERE SUBSTRING(B.KM_ID,1,LENGTH(A.KM_ID)) = A.KM_ID
AND LENGTH(B.KM_ID) > LENGTH(A.KM_ID))
KM_ID必须是一个字符型字段
试了试如下数据
km_id km_name flag
1 1 0
102 2 0
101001 2 0
0 3 0
0 1 0
执行之后变成
1 1 -1
102 2 -1
101001 2 -1
0 3 -1
0 1 -1
而我要的结果是:
1 1 0
102 2 -1
101001 2 -1
0 3 0
0 1 0