SQL求救!!!!!!!!!!!!!!!!!!(50分)

  • 主题发起人 主题发起人 Sammo
  • 开始时间 开始时间
S

Sammo

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]有两个ACCESS表,Goods和Supply
Goods表有字段:ID,Name,Store,StoreTun,Remarks
Supply表有字段:ID,Name,TheDate,Buy,Supply,GetTun,Remarks

使用如下的SQL语句:
UPDATE Goods SET Store = gg.Store + sum1,StoreTun=gg.StoreTun+sum2
FROM Goods AS gg,
(SELECT ID,Name,SUM(Buy)-SUM(Supply) AS sum1,SUM(Supply)-SUM(GetTun) AS sum2
FROM Supply group by ID,Name) AS ss
WHERE (ss.ID=gg.ID AND ss.Name=gg.Name)

出错信息如下:
syntax error (missing operator) in query expression 'gg.StoreTun+sum2 FROM Goods AS gg'.
 
先建个视图吧或重新写一个正确的Sql
 
怎么建立视图啊!!我是用Queyr控件做的,帮忙看看吧!!我已经想尽办法了!无法解决!!!!
 
试一试这个SQL:
UPDATE Goods as g,Supply as s
SET g.Store = g.Store + SUM(s.Buy)-SUM(s.Supply),
g.StoreTun = g.StoreTun + SUM(s.Supply)-SUM(s.GetTun)
WHERE s.ID=g.ID AND s.Name=g.Name;
 
我认为westboy2000的sql应该没问题,试试吧!
 
Update语句是不能跟From的,如你所写‘UPDATE Goods SET 。。。FROM Goods AS gg,。。。’
语法错误。
正确的应为:
UPDATE Goods
SET
Store = Store + (select sum(Buy-Supply) from Supply where Goods.ID = Supply.ID),
StoreTun=StoreTun+(select sum(Supply-GetTun) from Supply where Goods.ID = Supply.ID)

*我认为既然ID相等,就没必要Nane相等了。
 
谢谢大家!!我试了westboy2000的语句:
UPDATE Goods as g,Supply as s
SET g.Store = g.Store + SUM(s.Buy)-SUM(s.Supply),
g.StoreTun = g.StoreTun + SUM(s.Supply)-SUM(s.GetTun)
WHERE s.ID=g.ID AND s.Name=g.Name;
出错为:
You tried to execute a query that does not include the specified
expression 'g.Store+SUM(s.Buy)-SUM(s.Supply)' as part of an aggregate function.

又试了GZCYP的语句:
UPDATE Goods
SET
Store = Store + (select sum(Buy-Supply) from Supply where Goods.ID = Supply.ID),
StoreTun=StoreTun+(select sum(Supply-GetTun) from Supply where Goods.ID = Supply.ID)
出错为:
'Operation must use and updateable query'.
 
前面没调试就发言,实在不好意思,不小心写错了,
其实不要SUM才是正确的,我已经试过了,这次一定可以。
UPDATE Goods as g,Supply as s
SET g.Store = g.Store + s.Buy - s.Supply,
g.StoreTun = g.StoreTun + s.Supply - s.GetTun
WHERE s.ID=g.ID AND s.Name=g.Name;
 
To westboy2000:
谢谢您!
Supply表里会有很多相同的ID和Name的字段的,计算要求是:
要把所有相同的ID和Name的字段的Buy、Supply、GetTun求和后再与
Goods表的Store和StoreTun进行计算和修改的!
 
to Sammo:
其实你想一想,先把Supply表里的Buy、Supply、GetTun求和,再与Goods表的Store和StoreTun进行计算,
这与直接将Goods表和Supply表的对应字段进行运算是没有区别的,因为你在最后使用了
WHERE s.ID=g.ID AND s.Name=g.Name作条件,前后作运算的都是相同的数字,所以完全可以把两个部分放在一起来进行。
而且,好像ACCESS不支持子查询,所以你只能用我的方法了,难道我写的SQL运行结果不对么?我试过可以的。
 
非常感谢westboy2000兄!!!小弟中午有点事出去了,现在才回来!现在试试去!
谢谢了啊!!
 
谢谢westboy2000兄!!我刚刚试试过,可以更改原有的数据表的内容了!谢谢!
但要是原来的数据表Goods没有存在这个ID和Name的内容时,如何判断并把新的没有的ID和
Name的记录求和后插入数据表Goods中呢?
 
没人理偶了!?!
 
昨天周日没上网,没及时回答,别急啊。[:)]

>>但要是原来的数据表Goods没有存在这个ID和Name的内容时,
>>如何判断并把新的没有的ID和Name的记录求和后插入数据表Goods中呢?

你上面说的是什么意思啊?没看懂。[:(]
 
谢谢westboy2000老大!!
不好意思!说得不明了!!:)
Update只能修改已经存在的记录内容!没有存在的无法添加进去!
我要做的就是存在的就修改,不存在的就添加!

比如说:数据表Supply有ID=1001,NAME=“小食”的这个记录,也有其Buy和Supply等内容,但
数据表Goods没有存在这个ID=1001和Nam=“小食”的的记录时,怎么样把这个ID=1001和NAME=“小食”
的记录计算后添加到Goods表中去呢?
 
试一试下面这个,我没有调试,但是看了一下应该没什么问题。[:)]
Goods表的Remarks字段我不知道从哪里取,就没有写,如果Remarks字段是可以为空的,那就没什么问题,否则就要重写了。
insert into Goods (ID,Name,Store,StoreTun)
SELECT ID,Name,SUM(Buy-Supply),SUM(Supply-GetTun)
FROM Supply
where (ID,Name) not in (select ID,Name from Goods)
group by ID,Name;
 
谢谢westboy2000老大!我刚刚试了!出现了以下的错误提示:
you have witten a subquery that can return more than one field
without using the EXISTS reserved word in the main query's FROM
clause. Revise the SELECT statement of the subquery to request only
one field.
 
我忘了ACCESS不能写子查询了,不好意思。[:)]
错误信息好像说子查询不能返回多个字段,那么试一试下面这个:

insert into Goods (ID,Name,Store,StoreTun)
SELECT ID,Name,SUM(Buy-Supply),SUM(Supply-GetTun)
FROM Supply
where ID not in (select ID from Goods)
group by ID,Name;

你的ID是不是唯一索引?如果是的话,用ID作条件跟用ID+Name是一样的,
如果不是的话,那SQL就要重写了,你先试试看。
 
刚才的SQL肯定是对的了,我已经调试过了,就看你用ID作条件能不能唯一区分这些数据了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
1K
import
I
I
回复
0
查看
997
import
I
I
回复
0
查看
3K
import
I
后退
顶部