declare @tb1 table(ID int identity(1,1) primary key, price1 int, price2 int, baseID int) insert into @tb1 select 500,600,5 union select 600,800,8 declare @tb2 table(baseID int primary key, base nvarchar(10)) insert into @tb2 select 1,'3月' union select 2,'4月' union select 4,'5月' union select 5,'6月' union select 8,'7月' ;with c as ( select a.*, b.base from @tb1 a left join @tb2 b on a.baseID=b.baseID ) select *, price4=cast(price2*1.0/price3 as decimal(8,2)) from ( select *, price3=(select cast(x.price1*1.0/price1 as decimal(8,2)) from c where cast(left(x.base,1) as int)-left(base,1)=1) from c x )m
价格基数是活的,意思是当前价格基数ID为4,那上一个月的ID为3,取的是价格基数ID为3对应的数值
列 id(自增), 价格1,价格2, 价格基数id,价格基数
1 500 300 4 3月
表二:T_价格基数(上一个表中的值是通过它的下拉框来选择的)
列 id(自增),价格基数
1 3月
2 4月
4 5月
5 6月
8 7月
视图一:V_工程概况
列 id 价格1,价格2,价格3,价格4
条件:视图中的价格3=价格1除以上一个月的价格1,T_价格基数可以修改(因为表中的ID是自增,现在都不挨着了,可以加一列序号来显示他们的顺序),价格4为价格2除以价格3
但是要求算出来的值必须是一列,必须用视图来显示
要求:当上一月的价格1不存在时(也就是第一次输入时),判断下,当不存在时价格3为零
数据必须放在一行上
列 id(自增), 价格1,价格2, 价格基数id
1 500 300 5
2 600 800 8
表二:T_价格基数(上一个表中的值是通过它的下拉框来选择的)
列 id(自增),价格基数 ,序列数
1 3月 1
2 4月 2
4 5月 3
5 6月 4
8 7月 5
视图一:V_工程概况
列 id 价格1,价格2,价格3,价格4
条件:视图中的价格3=价格1除以上一个月的价格1,T_价格基数可以修改(因为表中的ID是自增,现在都不挨着了,可以加一列序号来显示他们的顺序),价格4为价格2除以价格3
但是要求算出来的值必须是一列,必须用视图来显示
要求:当上一月的价格1不存在时(也就是第一次输入时),判断下,当不存在时价格3为零
数据必须放在一行上
最后的数据如下:列 id(自增), 价格1,价格2, 价格基数id,价格基数, 价格3, 价格4
1 500 300 5 6月 0 0
2 600 800 8 7月 600/500=1.2 800/1.2=650
列 id(自增), 价格1,价格2, 价格基数id
1 500 300 5
2 600 800 8
表二:T_价格基数(上一个表中的值是通过它的下拉框来选择的)
列 id(自增),价格基数 ,序列数
1 3月 1
2 4月 2
4 5月 3
5 6月 4
8 7月 5
视图一:V_工程概况
列 id 价格1,价格2,价格3,价格4
条件:视图中的价格3=价格1除以上一个月的价格1,T_价格基数可以修改(因为表中的ID是自增,现在都不挨着了,可以加一列序号来显示他们的顺序),价格4为价格2除以价格3
但是要求算出来的值必须是一列,必须用视图来显示
要求:当上一月的价格1不存在时(也就是第一次输入时),判断下,当不存在时价格3为零
数据必须放在一行上
最后的数据如下:列 id(自增), 价格1,价格2, 价格基数id,价格基数, 价格3, 价格4
1 500 300 5 6月 0 0
2 600 800 8 7月 600/500=1.2 800/1.2=650
insert into @tb1
select 500,600,5
union
select 600,800,8
declare @tb2 table(baseID int primary key, base nvarchar(10))
insert into @tb2
select 1,'3月'
union
select 2,'4月'
union
select 4,'5月'
union
select 5,'6月'
union
select 8,'7月'
;with c as
(
select a.*, b.base from @tb1 a
left join @tb2 b on a.baseID=b.baseID
)
select *, price4=cast(price2*1.0/price3 as decimal(8,2)) from
(
select *, price3=(select cast(x.price1*1.0/price1 as decimal(8,2)) from c
where cast(left(x.base,1) as int)-left(base,1)=1)
from c x
)m