求一存储过程
--求一存储过程
--有三个例表a,b,c
--表a结构如下:项目编号(item),项目内容(descrip),项目公式(formula)
--其中项目公式字段存储 ‘表名.字段名'
--在其引用的所有表中,均有一个bill_date datetime(单据日期字段),及dept varchar(20)部门代号字段
--如下所示,引用到的sale及salary表中均有bill_date,dept字段
create table a(item varchar(20),descrip varchar(255),formula varchar(255) )
insert into a
select 'a001','销售额','sale.amt'
union
select 'a002','材料成本金额','sala.cost'
union
select 'a003','人工费','salary.amt'
--表b结构如下:部门编号(dept),部门名称(deptname)
create table b(dept varchar(20),deptname varchar(255))
insert into b
select 'a','家电柜'
union
select 'b','五金柜'
union
select 'c','食品柜'
union
select 'd','服装柜'
--根据上两个表的内容,生成结果集到c表
--表c的结构为:部门编号,项目编号,项目值,开始日期,结束日期
create table c(dept varchar(20),item varchar(20) value numeric(20,6),bdate datetime,edate datetime)
--生成规则,根据传入的参数,是一个日期区间(即开始日期 bdate,结束日期 edate)
--先循环表a的每一个项目,在每一个项目中循环处理表b的每一个部门,将结果放到c表,
--如表b中的部门取不到对应的项目值,则写入0,最终c表的记录条数=a表记录数量*b表记录数量
--其中c表的dept来自于b表的dept,c表的item来自于a表的item
--类似的c表的确良结果集为:
'a','a001',5000, '2004-10-01','2004-10-31'
'b','a001',5500, '2004-10-01','2004-10-31'
'c','a001',15000,'2004-10-01','2004-10-31'
'd','a001',18000,'2004-10-01','2004-10-31'
'a','a002',3000, '2004-10-01','2004-10-31'
'b','a002',4000, '2004-10-01','2004-10-31'
'c','a002',10000,'2004-10-01','2004-10-31'
'd','a002',12000,'2004-10-01','2004-10-31'
'a','a003',1000, '2004-10-01','2004-10-31'
'b','a003',1100, '2004-10-01','2004-10-31'
'c','a003',3000, '2004-10-01','2004-10-31'
'd','a003',3500, '2004-10-01','2004-10-31'
--上面第三列的数字是精简需求得来,以第一条记录为例,里面的5000应是执行类似下面的语句计算出来的:
select sum(sale.amt) from sale where dept = 'a001' and bill_date between
'2004-10-01 and '2004-10-31' 计算出来!