
在线等, 急急急!!!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 展开
产品类型 产品名称 数量
------------------------------------------
食品 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 展开
展开全部
你如何确定产品是类型的第一个产品还是第二个、第三个产品?只有三个产品?
写了一个,你看下
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
写了一个,你看下
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
展开全部
这是在哪里看到的题目?纯属刁难人!我想了半个小时都没撤,看有没有高手出现了,做出来了,我直接叫他师傅!
展开全部
怎么把这个问题关注呢?等高手。
展开全部
不知道!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询