在线等, 急急急!!!SQL Server的update 问题

比如产品表产品类型产品名称数量------------------------------------------食品A100食品B700食品C350化工D200化工E8... 比如产品表
产品类型 产品名称 数量
------------------------------------------
食品 A 100
食品 B 700
食品 C 350
化工 D 200
化工 E 800
化工 F 500
-------------------------------------
以产品类型为汇总单位将每个类型的第一个产品数量update成该类型第二个产品的数量减去第三个产品的数量, 如何实现啊?
(食品A的数量 = 食品B的数量 - 食品C的数量 = 700 - 350 = 350)
(化工D的数量 = 化工E的数量 - 化工F的数量 = 800 - 500 = 300)
重申几点:
1. 回复XW6400397, 这个问题不是刁难谁, 而是工作上遇到的实实在在的问题, 实在没研究出来再挂到这里的,... 呵呵
2. 回复tongnaifu, 问题描述再精确化一点:
产品类型 产品名称 数量 产品标识
--------------------------------------------------------
食品 A 100 aaa
食品 B 700 bbb
食品 C 350 ccc
化工 D 200 aaa
化工 E 800 bbb
化工 F 500 ccc
展开
 我来答 举报
百度网友38b75e5
2012-04-27 · TA获得超过103个赞
知道小有建树答主
回答量:281
采纳率:0%
帮助的人:207万
展开全部
你如何确定产品是类型的第一个产品还是第二个、第三个产品?只有三个产品?

写了一个,你看下

create table ta(产品类型 varchar(10),产品名称 varchar(10),数量 decimal(10,0),产品标识 varchar(10))
insert into ta
select '食品','A',100,'aaa'
union all select '食品','B',700,'bbb'
union all select '食品','C',350,'ccc'
union all select '化工','D',200,'aaa'
union all select '化工','E',800,'bbb'
union all select '化工','F',500,'ccc'

select * from ta

update ta set 数量 =v1.bbb -v1.ccc
from (
select * from (select 产品类型,数量,产品标识 from ta) a pivot (max(数量) for 产品标识 in (bbb,ccc)) b
) v1
where ta.产品类型=v1.产品类型 and ta.产品标识 ='aaa'

select * from ta

drop table ta
追问
这个OK了, 非常感谢!!!
另外, 再请教一下, 如果要同时更新两列, 怎么实现啊?
产品类型 产品名称 数量1 数量2 产品标识
食品 A 100 300 aaa
食品 B 700 900 bbb
食品 C 350 200 ccc
化工 D 200 200 aaa
化工 E 800 500 bbb
化工 F 500 400 ccc

(A.数量1=B.数量1-C.数量1=700-350=350)
(A.数量2=B.数量2-C.数量2=900-200=700)
(D.数量1=E.数量1-F.数量1=800-500=300)
(D.数量2=E.数量2-F.数量2=500-400=100)
追答
create table ta(产品类型 varchar(10),产品名称 varchar(10),数量1 decimal(10,0),数量2 decimal(10,0),产品标识 varchar(10))
insert into ta
select '食品','A',100,300,'aaa'
union all select '食品','B',700,900,'bbb'
union all select '食品','C',350,200,'ccc'
union all select '化工','D',200,200,'aaa'
union all select '化工','E',800,500,'bbb'
union all select '化工','F',500,400,'ccc'

select * from ta

update ta set 数量1 =v1.bbb -v1.ccc ,数量2 =v1.bbb2 -v1.ccc2
from (
select m.产品类型 ,m.bbb ,m.ccc ,n.bbb as bbb2,n.ccc as ccc2 from (
select * from (select 产品类型,数量1,产品标识 from ta) a
pivot (max(数量1) for 产品标识 in (bbb,ccc)) b
) m left join (
select * from (select 产品类型,数量2,产品标识 from ta) a
pivot (max(数量2) for 产品标识 in (bbb,ccc)) b
) n on m.产品类型 =n.产品类型
) v1
where ta.产品类型=v1.产品类型 and ta.产品标识 ='aaa'

select * from ta

drop table ta
百度网友e1644bd
2012-04-26 · TA获得超过573个赞
知道小有建树答主
回答量:409
采纳率:50%
帮助的人:85.5万
展开全部
这是在哪里看到的题目?纯属刁难人!我想了半个小时都没撤,看有没有高手出现了,做出来了,我直接叫他师傅!
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
邋遢道神通7
2012-04-26 · TA获得超过406个赞
知道小有建树答主
回答量:236
采纳率:37%
帮助的人:114万
展开全部
怎么把这个问题关注呢?等高手。
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
yanchong0813
2012-04-26 · 超过17用户采纳过TA的回答
知道答主
回答量:341
采纳率:0%
帮助的人:105万
展开全部
不知道!
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式