这个SQL语句怎么写?(100分)

  • 主题发起人 主题发起人 Marlowe
  • 开始时间 开始时间
M

Marlowe

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有两个表
test1 和 test2
其中test1 有两个字段(A1 char(2),B1 int)
test2 两个字段(A2 char(2),B2 int)
test1 test2
A1 B1 A2 B2
AA 0 AA 1
BB 0 AA 2
CC 0 BB 3
BB 4

要求得到结果 :
test1
A1 B1
AA 3
BB 7
CC 0

 
select a.a1,decode (sum(b.b1),'',0, sum(b.b1))
from test1 a,test2 b where a.a1 = b.a1 (+) group by a.a1;
 
Sorry,表结构看错了!!重发

select a.a1,decode (sum(b.b2),'',0, sum(b.b2)) from test1 a,test2 b where a.a1 = b.a2 (+) group by a.a1;
 
补充说明:
1、我要把test1的表按结果的形式修改
所以我觉得最少应该是用update 吧,
2、我用的是SQL Server 系统
decode 函数没找到,我按你写的执行了一下,
也报错了。
 
update test1 a set a.b1 = (select nvl(sum(b.b2),0) from test2 b where a.a1 = b.a2 group by b.a2);


我不熟悉SQL Server,但NVL(X,Y)的含义是若X为空则返回Y值,否则不变!!
 
请注意,上述示例中,TEST1库必须要有值!!!
 
你说的NVL(x,Y)在SQL Server中是Isnull(x,y)函数。
不过,我记得在子查询中不能有Group by 这一类的关键字出现。
所以这也是不行的。有人建议我用游标,不过游标实在太慢了。
而且,我觉得SQL语言一定能解决这个问题。
 
你怎么不试试,
我提供给予你的SQL已经测试过了的
 
首先表示感谢,我的问题在你的帮助下,顺利解决了。
不过 update test1 a set ...
在这里不能用a代替,只能写update test1 set ...,在子查询里的a要
用test1代替(可能是SQL Server 6.5的限制)。
再次表示感谢。
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
832
DelphiTeacher的专栏
D
后退
顶部