SELECT aa,bb, aa+bb as cc FROM Atable 的错误(100分)

  • 主题发起人 主题发起人 arewen
  • 开始时间 开始时间
A

arewen

Unregistered / Unconfirmed
GUEST, unregistred user!
我要将两个字符串字段并成一个字段:

ADOQuery1.SQL.Add(' SELECT aa,bb, aa+bb as cc FROM Atable');

当我用ADOQQuery1.Open;时
出现 "列名cc无效" 的错误,(其中aa 和 bb 是string类型的字段)。

同样的语句在Sqlserver的查询分析器中却可以执行。
 
你可以试一试,select aa,bb,aa+bb as "cc" from atable;
 
不用as可以吗?ADOQuery1.SQL.Add(' SELECT aa,bb, aa+bb cc FROM Atable');
 
楼上两位朋友的方法我试过了,不行啊~~
 
no问题呀!再多说点。
 
应该是这样吧:
update ATable set cc=aa+bb
当然,条件是存在cc字段。
 
我怎么没问题。我字段类型用的是varchar.
SQL中没有String型的。
 
我在DELPHI的SQL Explorer试过了,没问题。
你的数据库是什么,如果是ACCESS97,请升级到ACCESS97
 
如果是用Oracle的话用
SELECT aa,bb, aa||bb cc FROM Atable
 
我可能没有讲清楚,太对不起了~~本来我想简略一点写的,没想到上面的代码是可以的,
请看下面的代码:

ADOQuery1.SQL.Add(' SELECT aa,bb, aa+bb as cc FROM Atable where cc>="20018"');
ADOQQuery1.Open;
执行到Open这句时,出现 ‘列名cc无效’的错误,是出在WHERE这个子句上~~

各位兄弟再帮我看看应该怎么写?

 
早说嘛,SELECT产生的计算列是不能直接使用的,两种方法:
方法一:select aa,bb,aa+bb as cc from atable where aa+bb>="20018"
方法二:select aa,bb,cc from (select aa,bb,aa+bb as cc from atable) as
temptable where cc>="20018"
 
OK,刚才我也解决问题了~~~
我才注意到“SELECT产生的计算列是不能直接使用的”,嘿嘿,学了一招。

我是建立了一个视图(里面包含了nfyf了),然后再从这个视图来 WHERE nfyf>='20018'的。

oceanwave兄,不知这样是不是比你的那个要效率低一些?

回答完这个问题,可以结束题目了~~
 
如果你这个表的数据不是非常非常大,执行效率的差距没什么差别啦。
但多一个视图的中间环节,当然代码量就大了。如果你想要知道差别,可以用SQL SERVER
的查询分析器的执行计划来看看它的资源占有率就知道了,但我想应该在SQL SERVER中是
没有差别的。
既然一句就能搞定,为什么用两句呢,这样不是加大了维护量,和复杂程序?
 
多人接受答案了。
 
后退
顶部