请这里的版主们、各位好心朋友一定要帮看看这条语该如何写啊!!!!

qqyzq 2004-08-03 09:40:04
各位朋友,我现在遇到个这样的问题情况下下:
数据库采用:SQL2000
服务品名称:Jywater
数据库名:YC
相关表: Product(产品表) Model(机器表) ProduceTable(生产表)分别如下:

Product(产品表对应情况)
字段: ID ProductID Name Grade Price1 Price2 Price3
描述: 编号 名称 等级 价格1 价格2 价格3

1 11000010 A商品 一等品 20 18 15
2 11000010 A商品 二等品 14 13 11
3 11000010 A商品 三等品 10 9 8
4 11000011 A商品 一等品 30 28 26
5 11000011 A商品 二等品 25 24 23
6 11000011 A商品 三等品 20 18 14
Model(机器表对应情况)
字段: ID ModelID(机号) ProductID(对应产品) Long(每天规定产量)

1 1001 11000010 20
2 1001 11000011 25
3 1002 11000010 18
4 1003 11000010 20
5 1003 11000011 30
ProduceTable(每天生产表对应情况)
ID WorkID ModelID ProductID Grade PLong Price Amount
记录号 工号 机号 产品 等级 产量 单价值 总价值

1 0001 1001 11000011 一等品 10 26 260
2 0001 1001 11000011 二等品 8 23
3 0001 1001 11000011 三等品 1 14
4 0002 1002 11000010 一等品 18 18
5 0003 1003 11000010 一等品 30 20
.........................................................
N
通过以上三个你们应该可以看出表与有之前相关的属性了:

1、每天工人每天只在一台机号进行生产,可以生产多个商品
只人机器表中有对应的没得到可以加上
2、我现在是要对生产表中的 单价值 和 总价值 进行统计:

通过以上生产表我们看记录工人工号为001的情况,从生产表中看到是是在机号为
1001上生产且商品是11000010 那么在机号1001上生产商品11000010的每天产量应该
为20(包括了三等级的和),再看工人001的三个等级和生产总和为10加8加1
等于19<20,那么各个等级的产量的单价值就为产品表中对应的Price3;如果等于
就为Price2;如果大于则为Price1。总价值也就得出来了

现在我是想通过一条更新命令来更新产品表中每条记录的 单价值,个人认为有点复
杂。所在希望能帮忙的朋友多出出主意。看看这条更新语句如何写。谢谢???
...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqyzq 2004-08-04
  • 打赏
  • 举报
回复
非常的感谢。我觉得还没对。你再看我的表与表之间的关系,第一个与第二个是机号对产品的表,第二个与第三个是机号+产品对产量的表。你再看第三个产量表中的前三条记录。都是同一个人在同一台机器上生产的,机号是1001产品是11000011,也就是这个关系的标准产量是(25)在第二个表中可以看到,首要要统计第三个表中工号为001 在机号1001及产品为11000011的记录产量总和。再与25个比较,如果大于25则取第一个表中相应等级的价格1,等于则取价格2小于则取价格3。
另外就是在我的生产表中如果再加一个生产日期语句该如何写。
rea1gz 2004-08-03
  • 打赏
  • 举报
回复
少了括号,更正:

update a
set Price=case sign((select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)-b.Long)
when -1 then c.Price3
when 0 then c.Price2
else c.Price1 end
from ProduceTable a,Model b,Product c
where b.ModelID=a.ModelID and b.ProductID=a.ProductID
and a.ProductID=c.ProductID
and a.Grade=c.Grade

update ProduceTable
set Amount=Price*PLong

CSDMN 2004-08-03
  • 打赏
  • 举报
回复
优化一下:

update a
set Price=case sign((select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)-b.Long
when -1 then c.Price3
when 0 then c.Price2
else c.Price1 end
from ProduceTable a,Model b,Product c
where b.ModelID=a.ModelID and b.ProductID=a.ProductID
and a.ProductID=c.ProductID
and a.Grade=c.Grade

update ProduceTable
set Amount=Price*PLong


CSDMN 2004-08-03
  • 打赏
  • 举报
回复
最好两个语句:

update a
set Price=case when (select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)<b.Long then c.Price3
when (select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)=b.Long then c.Price2
else c.Price1 end
from ProduceTable a,Model b,Product c
where b.ModelID=a.ModelID and b.ProductID=a.ProductID
and a.ProductID=c.ProductID
and a.Grade=c.Grade

update ProduceTable
set Amount=Price*PLong
CSDMN 2004-08-03
  • 打赏
  • 举报
回复
一个语句,不过效率不怎么样:
update a
set Price=case when (select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)<b.Long then c.Price3
when (select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)=b.Long then c.Price2
else c.Price1 end,
Amount=case when (select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)<b.Long then c.Price3
when (select sum(PLong ) from ProduceTable where ModelID=a.ModelID and ProductID=a.ProductID)=b.Long then c.Price2
else c.Price1 end*a.PLong
from ProduceTable a,Model b,Product c
where b.ModelID=a.ModelID and b.ProductID=a.ProductID
and a.ProductID=c.ProductID
and a.Grade=c.Grade
qqyzq 2004-08-03
  • 打赏
  • 举报
回复
没有人管啊。帮帮忙吧。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧