表abc内容:
aa bb cc
---------- ------------ -----------
111 字afdas
202 字bfda
231 字cdfas表cde中内容:
ll qq eee
---------- ----------- ---------
100 200 001
200 250 002表abc和cde中还有很多很多数据...
关系是如果表abc中的aa值在100到200之间则cc的值为:001如果表abc中的aa值在200到250之间.则abc中的cc值为002
.....请帮小弟写一下这个句子.先谢各位了.
aa bb cc
---------- ------------ -----------
111 字afdas
202 字bfda
231 字cdfas表cde中内容:
ll qq eee
---------- ----------- ---------
100 200 001
200 250 002表abc和cde中还有很多很多数据...
关系是如果表abc中的aa值在100到200之间则cc的值为:001如果表abc中的aa值在200到250之间.则abc中的cc值为002
.....请帮小弟写一下这个句子.先谢各位了.
when aa >=100 and aa<=200 then 001
when .....
end as cc from abc
(SELECT TOP 1 eee
FROM cde
WHERE ll < aa AND qq > aa) AS cc
FROM abc
我经过测试的,绝对行,够简单吧,不过好像分少了点
when aa >=200 and aa<=250 then 002
when .....
end as cc from abc
你现在想要的就是条件是多个 的,你不可能把所有的都列出来
你也是使用循环啊,把CDE表的记录取出来,排序一下,
然后把 WHEN 后面的值用参数来实现,对 CDE表中的数据集进行
循环,不就是你要的结果吗?
query1.sql.add('select * from cde ');
query1.open;
query1.first;
while not query1.eof do
begin
query2.sql.add(' select aa,bb,case when aa >=:pll
query2.sql.add('and aa<=:pqq ');
query2.sql.add('then (select eee from cde where ll=:ll and qq=:qq)');
query2.sql.add('end as cc from abc');
query2.parambyname('pll').Asstring:=query1.fieldbyname('ll').AString;
query2.parambyname('pqq').Asstring:=query1.fieldbyname('qq').AString;
query2.parambyname('ll').Asstring:=query1.fieldbyname('ll').AString;
query2.parambyname('qq').Asstring:=query1.fieldbyname('qq').AString;
把query2的记录插入到临时表中 再循环,最后我们对临时进行操作。
query1.next;
end;
UPDATE abc
SET cc =(SELECT TOP 1 eee
FROM cde
WHERE ll < aa AND qq > aa)