求教SQL累减语句 !

tangtomtnt 2005-06-01 02:55:33
表一
Item Qty
A 10
A 12
A 14
B 13
B 60
C 30
C 40
C 10

表二
Item Qty
A 1000
B 70
C 100

表三
Item Qty Result
A 10 990 =(1000-10)
A 12 978 =(990-12)
A 14 964 =(978-14)
B 13 57 =(70-13)
B 60 -3 =(57-60)
C 30 70 =(100-30)
C 40 30 =(70-40)
C 10 20 =(30-10)

要求:得到表三的Result列, Result的第一Item值是表二的Qty为基数,然后Result列的值依次累减而成! 我现在着不出SQL的语句能实现,各位又什么方法吗?
...全文
372 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanduan1122 2005-06-01
  • 打赏
  • 举报
回复
mark
tangtomtnt 2005-06-01
  • 打赏
  • 举报
回复
MSSQL没有row变量,看来也没别的办法了。
zjcxc 元老 2005-06-01
  • 打赏
  • 举报
回复
--示例

--示例数据
create table 表一(Item varchar(10),Qty int)
insert 表一 select 'A',10
union all select 'A',12
union all select 'A',14
union all select 'B',13
union all select 'B',60
union all select 'C',30
union all select 'C',40
union all select 'C',10

create table 表二(Item varchar(10),Qty int)
insert 表二 select 'A',1000
union all select 'B',70
union all select 'C',100
go

--查询
select id=identity(int),a.*,Result=b.Qty
into # from 表一 a,表二 b
where a.Item=b.Item
order by a.Item
declare @Item varchar(10),@s int
update # set
@s=case when @Item=Item then @s-Qty else Result-Qty end,
@Item=Item,Result=@s
select * from #
drop table #
go

--删除测试
drop table 表一,表二

/*--结果
Item Qty Result
---------- ----------- -----------
A 10 990
A 12 978
A 14 964
B 13 57
B 60 -3
C 30 70
C 40 30
C 10 20

(所影响的行数为 8 行)
--*/
zjcxc 元老 2005-06-01
  • 打赏
  • 举报
回复
晕,不子查询你可以用临时表啊,方法是这样的,如何运用是你的选择嘛。
tangtomtnt 2005-06-01
  • 打赏
  • 举报
回复
还有没有其他方法,子查询速度慢,我的数据库数据很多啊!本来就已经是几个表关联了,还搞子查询,我晕!
zjcxc 元老 2005-06-01
  • 打赏
  • 举报
回复
--示例

--示例数据
create table 表一(Item varchar(10),Qty int)
insert 表一 select 'A',10
union all select 'A',12
union all select 'A',14
union all select 'B',13
union all select 'B',60
union all select 'C',30
union all select 'C',40
union all select 'C',10

create table 表二(Item varchar(10),Qty int)
insert 表二 select 'A',1000
union all select 'B',70
union all select 'C',100
go

--查询
select id=identity(int),* into # from 表一
select a.Item,a.Qty,Result=b.Qty-(select sum(Qty) from # where Item=a.Item and id<=a.id)
from # a,表二 b
where a.Item=b.Item
drop table #
go

--删除测试
drop table 表一,表二

/*--结果
Item Qty Result
---------- ----------- -----------
A 10 990
A 12 978
A 14 964
B 13 57
B 60 -3
C 30 70
C 40 30
C 10 20

(所影响的行数为 8 行)
--*/

34,668

社区成员

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

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