34,838
社区成员




--4、其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku
---try:
select a.riqi,a.dspid,a.dspcode,a.dspck,a.ruku,a.chuku,jiecun=isnull(b.jiecun,0)+a.ruku-a.chuku from @sprk a left join @sprk b
on a.dspid=b.dspid+1
例:有一个收支表(szb)如下结构
日期(RQ),...项目(XM),收入, 支出
2006.10.01 收工资 500
2006.10.02 付房租 200
2006.10.03 购物 50
目标说明: 要用一条SQL语句生成结果集如下(比上表多一个结余)
每条记录的 结 = 上一条记录的结余+当前记录收入-当前记录支出
日期(RQ),...项目(XM),收入, 支出
2006.10.01 收工资 500
2006.10.02 付房租 200
2006.10.03 购物 50
declare @t table (
收支日期RQ datetime,
收支项目XM varchar(20),
收入金额SL int,
支出金额ZC int
)
insert @t
select '2006.10.01','收工资',500,0 union all
select '2006.10.02','付房租',0,200 union all
select '2006.10.03','购物支出',0,50
select 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY = isnull(收入金额SL - 支出金额ZC ,0) into #temp from @t
update #temp
set 结余JY=(select isnull(sum(收入金额SL - 支出金额ZC),0)
from #temp tt
where TT.收支日期RQ<=#temp.收支日期RQ)
select convert(varchar(10),收支日期RQ,120) as 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY from #temp
drop table #temp
--结果
收支日期RQ 收支项目XM 收入金额SL 支出金额ZC 结余JY
---------- ---------- ---------- ---------- -----------
2006-10-01 收工资 500 0 500
2006-10-02 付房租 0 200 300
2006-10-03 购物支出 0 50 250
(所影响的行数为 3 行)
select * from sprk where dspcode = '某值'
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE
AS RAISERROR (50009, 16, 10)
GO
--好象这两都可以.
select 结存 = sum(ruku - chuku) from sprk where riqi <= '某日期' and dspcode = '某商品'
select 结存 = jiecuny from sprk where riqi = '某日期' and dspcode = '某商品'