首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么用SQL语句实现下面效果

2014-01-17 
如何用SQL语句实现下面效果原始数据:id编号金额变化100120020013003001-150要通过SQL语句得到下面效果id编

如何用SQL语句实现下面效果
原始数据:
id     编号     金额变化
1      001      200
2      001      300
3      001      -150


要通过SQL语句得到下面效果
id     编号     金额变化   结存
1      001      200      200 
2      001      300      500
3      001      -150     350

问如何实现?

[解决办法]


if object_id('test',N'U')>0
  drop table test
create table test(id int,[编号] varchar(5),[金额变化] int)
insert into test(id,[编号],[金额变化])
select 1,'001',200 union all
select 2,'001',300 union all
select 3,'001',-150

--语句
select a.id,a.[编号],a.[金额变化]
,SUM(b.[金额变化]) as [结存]
from test a left join test b
on a.id>=b.id
group by a.id,a.[编号],a.[金额变化]

--结果

(3 行受影响)
id          编号    金额变化        结存
----------- ----- ----------- -----------
1           001   200         200
2           001   300         500
3           001   -150        350

(3 行受影响)


[解决办法]
----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2013-09-22 17:36:01
-- Verstion:
--      Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 
--Feb 10 2012 19:39:15 
--Copyright (c) Microsoft Corporation
--Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go 
create table [tb]([id] int,[编号] varchar(3),[金额变化] int)
insert [tb]
select 1,'001',200 union all
select 2,'001',300 union all
select 3,'001',-150
--------------开始查询--------------------------
SELECT 
  id,编号,(SELECT SUM(金额变化) AS  金额变化 FROM TB WHERE id<=t.id) AS 金额变化
FROM
  TB t
----------------结果----------------------------
/* id          编号   金额变化
----------- ---- -----------
1           001  200
2           001  500
3           001  350

(3 行受影响)

*/

热点排行