收录日期:2019/10/18 22:12:31 时间:2016/06/06 10:24:37 标签:数据库及相关技术
能不能用SQL实现替换某一字段满足某一条件的记录
如把TABLE1字段A中所有为-999的数据替换成0,如何写,请大家写出代码,谢谢!
基本的SQL语句.

AnsiString sqlstr="update Table1 set colmn='0' where colmn='-999'"
ADOQuery1->Close();
ADOQuery1->SQL->Text=sqlstr;
ADOQuery1->ExecSQL();
谢谢!
如果是针对ADOQuery的查询结果进行数据替换操作,为什么如下代码不行?
提示信息为:字段“数量”不可更新!

String sql="update (select t1.datetime as 时间,t1.a as 单价,t2.c as 数量 from t1 left  join t2 on t1.datetime=t2.datetime) set 数量=0 where 数量=-999";

ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open();
在SQL中使用Update语句是更新实际表的字段,而不是你所谓通过select查出来的结果集.所以你上面的SQL是错误的.
请注意update的语法!
上面的语句应该修改为
update t2 set t2.c='0' from t1 left  join t2 on t1.datetime=t2.datetime where t2.c='-999'
结贴吧
这样一来,我原来的t2这个表不是被改动了,我只是想对查询结果进行修改,而不改变原表啊!
另外,想问一下,如何对查询结果进行修改?
看来楼主对SQL了解的太少了.
把SQL语句改成这样
select t1.datetime as 时间,t1.a as 单价,
case
when t2.c='-999' then '0'
else 
 t2.c
end as 数量  
from t1 left  join t2 on t1.datetime=t2.datetime
是啊,我用SQL不多,所以一知半解,还请大家多帮忙,先谢了,我去试试看。
用case..when...then...
呵呵,我用lurel的代码试了试,提示:末指定的错误!
这下更复杂了,连错哪个地方都不知道了。
这是我的代码,会错在哪里呢,请各位帮看看,谢谢!
String sql="select t1.datetime as 日期,t1.a as 单价,";
 sql+="case when t2.c=-999 then 0";
 sql+=" else t2.c end as 数量";
 sql+=" from t1 left join t2 on t1.datetime=t2.datetime";

 ADOQuery3->SQL->Clear();
 ADOQuery3->SQL->Add(sql);
 ADOQuery3->Open() ;
你首先在数据库里面执行一下,看有没有什么问题,如果能返回结果,说明SQL语句没问题.
然后看一下ADOQuery3->SQL->Text值,核对一下,看是否和数据库的SQL语句一致.自己调试一下就可以搞定了.
ADOQuery1->Close();
ADOQuery1->SQL->Text=sqlstr;
ShowMessage(ADOQuery1->SQL->Text);
ADOQuery1->ExecSQL();
我的是ACCESS数据库,在ACCESS中测试如下SQL语句:
select t1.datetime as 日期,t1.a as 单价 ,case when t2.c=-999 then 0 else t2.c end as 数量 from t1 left t2 on t1.datetime=t2.datetime

提示错误信息为:操作符丢失在查询表达式“case when t2.c=-999 then 0 else t2.c end ”中。
我看了看没有发现哪错, 与lurel(城市陌生人) 的一模一样啊。

把 else t2.c 去掉错误仍然一样,但把“case ......end”部分去掉后则能正常查询,我怀疑
“case .....end”部分有错,但不知怎么改(我的t2.c为数字型字段,若与lurel(城市陌生人)一样加上‘’也不行)。
我的是ACCESS数据库,在ACCESS中测试如下SQL语句:
select t1.datetime as 日期,t1.a as 单价 ,case when t2.c=-999 then 0 else t2.c end as 数量 from t1 left join t2 on t1.datetime=t2.datetime

提示错误信息为:操作符丢失在查询表达式“case when t2.c=-999 then 0 else t2.c end ”中。
我看了看没有发现哪错, 与lurel(城市陌生人) 的一模一样啊。

把 else t2.c 去掉错误仍然一样,但把“case ......end”部分去掉后则能正常查询,我怀疑
“case .....end”部分有错,但不知怎么改(我的t2.c为数字型字段,若与lurel(城市陌生人)一样加上‘’也不行)。

access不支持这么复杂的语法,只有SQL Server和Oracle9i以上才支持,建议中途创建一个临时表,然后更新临时表进行查询吧.
我用了Microsoft.Jet.OLEDB.4.0引擎,为什么也不行啊
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test\test.mdb;Persist Security Info=False
Update p set t2.c=0
From t2  left  join t2 on t1.datetime=t2.datetime and t2.c=999
改正一下:
Update T2 set t2.c=0
From t2  left  join t1 on t1.datetime=t2.datetime and t2.c=999
我想用 select ........into #abc 来建临时表为什么不行,是不是也是ACCESS的问题?
这种语法有错吗?为什么执行时错
creat table aaa as selct * t1
这种语法有错吗?为什么执行时错
creat table aaa as selct * from t1
access 不支持比较复杂的语法,不要在SQL语句较劲了.
老老实实的create一个表,然后把select t1.datetime as 时间,t1.a as 单价,t2.c as 数量 from t1 left  join t2 on t1.datetime=t2.datetime插入这个表中,然后update这个表,每次调用前先删除这个表就可以了.

散分,祝大家:开心每一秒,快乐每一天,幸福每一年,健康到永远,新年快乐! 散分祝新年快乐,天天开怀合不拢嘴! 作為域控制器的windows2003防火牆應開啟哪些端口? 文件操作的高级应用!请求帮助! 新架网站,疯求大家帮忙(在线等!!!1) 开心散分,明天就是2006年了 我就是喜欢散分! 函数与基本的算法。(取值函数)! 如何对两条完全相同的记录,只取其中的一条记录(含有Blob字段)? 一年又一年 今天是2005年的最后一天了,大家还有什么事情没有做的赶紧做呀!!!! VS2005使用操作小问题? 燃气系统开发项目 大家新年好!衷心祝福,散分!! MP插在式电脑能用,插在笔记本电脑却不能启动?????? 怎么写Cookie好像我的Cookie不好用 通过软件设计师考试了,散分200表示祝贺,也希望自己快点走出阴影!!! 中了Downloader.Trojan病毒,要怎么杀毒? 求助各位大侠一个莫名其妙的问题! 求救directX编程问题 有趣问题:能否通过编程判断客户端是否安装了FLash插件? 请问如果用ASP写一个程序,让它不停地刷新本页 用winform实现文件上传到服务器,有没有比较好的解决方案? 请教各位关于传值的小问题! 请问:ResultSet为什么不能对同一字段读取两次?它的数据结构是怎样的呢? 麻烦各位前辈给指点一些,谢谢!(一键切换外网与内网)解决马上送分!!! winfrom下面如何连接ACCSSE数据库,要相对地址。谢谢。 菜鸟发问。大家帮忙阿!谢谢,谢谢。送分50。急 有趣问题:能否通过编程判断客户端是否安装了FLash插件? 一个关于JTree打开的问题