表结构如下:
sprk(dspid int,dspcode char(12),dspck char(12),ruku decimal(10,3),chuku decimal(10,3),jiecun decimal(10,3),riqi char(10))
primary key [dspid]
riqi dspid dspcode dspck ruku chuku jiecun
2006-01-01 1 11010012 11010012 10 0 50
2006-01-21 2 11010012 11010012 0 30 20
2006-01-21 3 11010012 11010012 10 0 30
2006-02-16 …
其中, ruku 是表示入库,chuku 表示出库,jiecuny 表示结存
1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存
2.当更新jiecun 时,可以自动数据插入到其他的表中
3.写个视图根据dspcode来查询他的交易明细.
4.其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku
写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40)
sprk(dspid int,dspcode char(12),dspck char(12),ruku decimal(10,3),chuku decimal(10,3),jiecun decimal(10,3),riqi char(10))
primary key [dspid]
riqi dspid dspcode dspck ruku chuku jiecun
2006-01-01 1 11010012 11010012 10 0 50
2006-01-21 2 11010012 11010012 0 30 20
2006-01-21 3 11010012 11010012 10 0 30
2006-02-16 …
其中, ruku 是表示入库,chuku 表示出库,jiecuny 表示结存
1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存
2.当更新jiecun 时,可以自动数据插入到其他的表中
3.写个视图根据dspcode来查询他的交易明细.
4.其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku
写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40)
create proc proc_name
@rq datetime,@dspcode varchar(10),@ret int = 0
as
select @ret = jiecun from sprk where datediff(d,rirq,@rq) = 0 and dspcode = @dspcode
go
--触发器
--好象这两都可以.
select 结存 = sum(ruku - chuku) from sprk where riqi <= '某日期' and dspcode = '某商品'
select 结存 = jiecuny from sprk where riqi = '某日期' and dspcode = '某商品'
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 * from sprk where dspcode = '某值'
写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40) 参考:例:有一个收支表(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 购物 50declare @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 @tupdate #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 #tempdrop 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 行)
----表CREATE TABLE [dbo].[sprk] (
[dspid] [int] NOT NULL ,
[dspcode] [char] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[dspck] [char] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[ruku] [decimal](10, 3) NULL ,
[chuku] [decimal](10, 3) NULL ,
[jiecun] [decimal](10, 3) NULL ,
[riqi] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOALTER TABLE [dbo].[sprk] WITH NOCHECK ADD
CONSTRAINT [PK_sprk] PRIMARY KEY CLUSTERED
(
[dspid]
) ON [PRIMARY]
GOInsert Into sprk (riqi,dspid,dspcode,dspck,ruku,chuku,jiecun )
Select '2006-01-01' ,1 ,11010012 ,11010012 ,10 ,0, 50
union
select '2006-01-21',2 ,11010012 ,11010012 ,0 ,30 ,20
union
select '2006-01-21', 3, 11010012, 11010012, 10, 0 ,30
GO 其中, ruku 是表示入库,chuku 表示出库,jiecuny 表示结存
1.用存储过程来查询某个日期(riqi)的某个商品(dspcode) 的结存
2.当更新jiecun 时,可以自动数据插入到其他的表中
3.写个视图根据dspcode来查询他的交易明细.
4.其中数据为商品的业务流水库,以dspid值为业务发生顺序,字段jiecun=上一行的jiecun+本行的ruku-本行的chuku
写一存储过程完成此表的计算逻辑,第一行数据计算时因其上一行不存在以给存储过程传递的参数为准(如表格中的第一行数据其参数即为40)
---1.
CREATE PROCEDURE cx @as_ri varchar(100) , @as_sp varchar(100)
AS
begin
select * From sprk where riqi = @as_ri and dspid = @as_sp
end---2
CREATE TRIGGER cftj ON [dbo].[sprk]
FOR UPDATE
AS
beginend----44
update sprk
set jiecun =(select isnull(sum(ruku - chuku),0)
from sprk tt
where TT.riqi<=sprk.riqi)select * from sprk几乎就是这个意思 没有特别相信的代码
--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
insert ta select
'2006-01-01', 1, 11010012, 11010012, 10, 0 ,0 union select
'2006-01-21', 2, 11010012, 11010012, 0 ,30, 0 union select
'2006-01-21', 3, 11010012 ,11010012, 10 ,0 ,0select * from tago
create proc proc_test
@ruku int,
@chuku int,
@jiecun int
as
begin
update a
set jiecun = isnull((select sum(ruku + jiecun - chuku) from ta where dspid <= a.dspid),0) +@ruku +@jiecun - @chuku
from ta a
end
goexec proc_test 0,0,40select * from ta
/*
(所影响的行数为 3 行)riqi dspid dspcode dspck ruku chuku jiecun
------------------------------------------------------ ----------- ----------- ----------- ----------- ----------- -----------
2006-01-01 00:00:00.000 1 11010012 11010012 10 0 0
2006-01-21 00:00:00.000 2 11010012 11010012 0 30 0
2006-01-21 00:00:00.000 3 11010012 11010012 10 0 0(所影响的行数为 3 行)
(所影响的行数为 3 行)riqi dspid dspcode dspck ruku chuku jiecun
------------------------------------------------------ ----------- ----------- ----------- ----------- ----------- -----------
2006-01-01 00:00:00.000 1 11010012 11010012 10 0 50
2006-01-21 00:00:00.000 2 11010012 11010012 0 30 20
2006-01-21 00:00:00.000 3 11010012 11010012 10 0 30(所影响的行数为 3 行)*/
drop table tadrop proc proc_test