求一SQL语句

noproblem12 2003-10-16 11:27:23
a表结构
id NUM
1 500
2 200
3 30
4 400

b表
id A NUM
1 1 20
1 2 50
1 3 60
2 1 10
3 1 10
...

要求将b表id与a表id相同的记录中的NUM字段相减,只操作一个id的记录
比如操作id=1的记录后,b表不变,a表变成
id NUM
1 370
2 200
3 30
4 400
可写成存贮过程,同时用参数确定id
...全文
44 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jkljf 2003-10-16
  • 打赏
  • 举报
回复
刚才搞错了

declare @a table(id int, NUM int)
declare @b table(id int, A int, NUM int)

insert into @a values(1, 500)
insert into @a values(2, 200)
insert into @a values(3, 30)
insert into @a values(4, 400)

insert into @b values(1, 1, 20)
insert into @b values(1, 1, 20)
insert into @b values(1, 1, 20)
insert into @b values(1, 2, 50)
insert into @b values(1, 2, 50)
insert into @b values(1, 3, 60)
insert into @b values(1, 4, 20)
insert into @b values(2, 1, 10)
insert into @b values(3, 1, 10)


select * from @a
select * from @b

declare @id int
set @id = 1
update @a
set NUM = NUM - isnull(tt.cc, 0) from (select SUM(t.c) cc from (select SUM(distinct b.NUM) c from @b b where b.id = @id group by b.id, b.A) t) tt
where id = @id

select * from @a
银狐被占用 2003-10-16
  • 打赏
  • 举报
回复
我有点没有看明白楼主的问题!

楼主说只操作一个ID。

那么条件就为ID=1不就可以了吗!

update a set a.num=a.num-(select sum(num) num from b where b.id=1) where a.id=1

不就可以了吗!?

是不是我理解错了!?请各位大侠指教!
jkljf 2003-10-16
  • 打赏
  • 举报
回复
declare @a table(id int, NUM int)
declare @b table(id int, A int, NUM int)

insert into @a values(1, 500)
insert into @a values(2, 200)
insert into @a values(3, 30)
insert into @a values(4, 400)

insert into @b values(1, 1, 20)
insert into @b values(1, 1, 20)
insert into @b values(1, 1, 20)
insert into @b values(1, 2, 50)
insert into @b values(1, 2, 50)
insert into @b values(1, 3, 60)
insert into @b values(2, 1, 10)
insert into @b values(3, 1, 10)


select * from @a
select * from @b

update @a
set NUM = NUM - isnull(t.c, 0) from (select SUM(distinct b.NUM) c from @b b where b.id = 1) t
where id = 1

select * from @a
jkljf 2003-10-16
  • 打赏
  • 举报
回复
把 b.id = 1 和 id = 1的值换成@id的这个变量就可以了
jkljf 2003-10-16
  • 打赏
  • 举报
回复
declare @a table(id int, NUM int)
declare @b table(id int, A int, NUM int)

insert into @a values(1, 500)
insert into @a values(2, 200)
insert into @a values(3, 30)
insert into @a values(4, 400)

insert into @b values(1, 1, 20)
insert into @b values(1, 1, 20)
insert into @b values(1, 1, 20)
insert into @b values(1, 2, 50)
insert into @b values(1, 2, 50)
insert into @b values(1, 3, 60)
insert into @b values(2, 1, 10)
insert into @b values(3, 1, 10)


select * from @a
select * from @b

update @a
set NUM = NUM - t.c from (select SUM(distinct b.NUM) c from @b b where b.id = 1 group by b.id ) t
where id = 1

select * from @a
aierong 2003-10-16
  • 打赏
  • 举报
回复
create table b(id int, A int, NUM int)
insert into b select 1, 1, 20
insert into b select 1, 1, 20
insert into b select 1, 1, 20
insert into b select 1, 2, 50
insert into b select 1, 2, 50
insert into b select 1, 3, 60
insert into b select 2, 1, 10
insert into b select 3, 1, 10
go
create table a(id int, NUM int)
insert into a select 1, 500
insert into a select 2, 200
insert into a select 3, 30
insert into a select 4, 400

select a.id,a.num-isnull(b.sums,0) num
from a left join (
select [id],sum(num) sums
from b
group by [id]) b
on a.[id]=b.[id]
sdhdy 2003-10-16
  • 打赏
  • 举报
回复
--modify
update a表 set num=a表.num-isnull(b.num,0) from (select id,sum(num) num from b表 group by id ) b
where a表.id=b.id
sdhdy 2003-10-16
  • 打赏
  • 举报
回复
update a表 set num=a表.num-isnull(b.num,0) from (select id,sum(num) num from b表 group by id ) b
where a表.id=b表.id
sdhdy 2003-10-16
  • 打赏
  • 举报
回复

update a表 set num=a表.num-isnull(b.num,0) from (select id,sum(num) num from b表 ) b
where a表.id=b表.id
yujohny 2003-10-16
  • 打赏
  • 举报
回复
或者
update T
set T.NUM= T.NUM-T2.Num
from a表 T inner join (select id,sum(Num) Num from (select distinct id,A,Num from b表) T1 group by id,A) T2 where T2.id = T.id
yujohny 2003-10-16
  • 打赏
  • 举报
回复
update a表
set NUM= NUM-T2.Num
from (select id,sum(Num) Num from (select distinct id,A,Num from b表) T1 group by id,A) T2 where T2.id = a表.id
noproblem12 2003-10-16
  • 打赏
  • 举报
回复
更改一下b表结构为
b表
id A NUM
1 1 20
1 1 20
1 1 20
1 2 50
1 2 50
1 3 60
2 1 10
3 1 10
.........
id和a列相同的忽略

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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