select
a.交易日期,
a.币种,
a.交易金额 * (select top 1 兑率 from 兑换率表 where 公布日期 < a.交易日期 order by 公布日期 desc)
from
交易表 a
a.交易日期,
a.币种,
a.交易金额 * (select top 1 兑率 from 兑换率表 where 公布日期 < a.交易日期 order by 公布日期 desc)
from
交易表 a
解决方案 »
- 关于触发器的一个疑问
- 独立局域网(不连internet)中的ip地址是如何给出的,是任意的吗?独立局域网中的IP地址是否与internet的IP地址无关,并且可以重复任意选择?
- 巨难的问题。。高手请进来哈。。
- 请问如何将取出的一条记录横列变成竖列
- 求一sql分组方法??
- 高分求救,远程调用存储过程的问题。
- 求sql 困惑了我好久,没人回答。分都散得差不多了
- 一个关于SQL_Server2000复制时发生的问题,请大家帮忙!(在线等待)
- 难中的难题。不是高手不用过来
- 谁能发表在十几条数据上建立触发器好吗?
- 想问一下CSDN论坛的数据库是怎么设计的,就是提问,回复,还有记录个人得分是怎么关连的
- 这样的存储过程怎么写?
a.交易日期,
a.币种,
a.交易金额 * (select 兑率 from 兑换率表 where 公布日期 =a.交易日期)
from
交易表 a
where a.公布日期<=b.交易日期
order by a.公布日期 desc
你是指与现实生活中的兑率不对??这个问题我们就不要关心了。我们只关心逻辑正确即可。
-----------------------------------------------------------------------------
select
a.交易日期,
a.币种,
a.交易金额 * (select
top 1 兑率
from
兑换率表
where
公布日期 < a.交易日期
order by
公布日期 desc)
from
交易表 a
-----------------------------------------------------------------------------
倘若不是,我觉得应当是两个表的币种字段应当一致,才能兑换,那么应用如下SQL语句:
-----------------------------------------------------------------------------
select
a.交易日期,
a.币种,
a.交易金额 * (select
top 1 兑率
from
兑换率表
where
公布日期 < a.交易日期 and 币种 = a.币种
order by
公布日期 desc)
from
交易表 a
-----------------------------------------------------------------------------
Create Table 兑换率表 (公布日期 datetime, 币种 varchar(5),兑率 decimal(8,1))
insert into 兑换率表
select '1900-1-1','RMB',7
UNION select '2000-1-1','RMB',8
UNION select '2005-1-1','RMB',9
go--DROP Table 交易表
Create Table 交易表 (交易日期 datetime, 币种 varchar(5), 交易金额 Money )
go--处理的触发器
create trigger tr_insert on 交易表
instead of insert
as
if @@rowcount=0 return
select * into #t from inserted
update a set 交易金额=a.交易金额*b.兑率
from #t a,兑换率表 b
where a.交易日期>=b.公布日期
and not exists(
select * from 兑换率表
where a.交易日期>=公布日期
and 公布日期>b.公布日期)
insert into 交易表 select * from #t
go--插入数据
insert into 交易表
select '2004-1-1','USD',300
go--显示结果
select * from 交易表
go--删除测试
drop table 交易表,兑换率表/*--测试结果
交易日期 币种 交易金额
-------------------------- ------ -------------
2004-01-01 00:00:00.000 USD 2400.0000(所影响的行数为 1 行)
--*/
insert into 兑换率表
select '1900-1-1','RMB',7
UNION select '2000-1-1','RMB',8
UNION select '2005-1-1','RMB',9--DROP Table 交易表
Create Table 交易表 (交易日期 datetime, 币种 varchar(5), 交易金额 Money )
insert into 交易表
select '2004-1-1','USD',300
insert into 交易表
select '2004-1-1','RMB',300
insert into 交易表
select '2001-1-1','RMB',320
insert into 交易表
select '2003-1-1','RMB',200insert into 交易表
select '1999-1-1','RMB',200
insert into 交易表
select '2005-1-2','RMB',200select * from 兑换率表
select * from 交易表
begin tran
declare @mtype varchar(10)
set @mtype = 'RMB'
select id=identity(int),a.*,0 as rate into #tm from 交易表 a where 币种 = @mtype declare @tranBDate datetime
declare @tranEDate datetime
declare @rate int
declare cur_do cursor for select 公布日期,兑率 from 兑换率表 where 币种=@mtype
open cur_do
fetch next from cur_do into @tranBDate,@rate
while (@@rowcount > 0)
begin
select @tranEDate=isnull(min(公布日期),convert(datetime,'2999-12-31')) from 兑换率表 where 币种=@mtype and 公布日期 > @tranBDate
update #tm set rate = @rate where 交易日期 > @tranBDate and 交易日期<=@tranEDate
fetch next from cur_do into @tranBDate,@rate
end
close cur_do
deallocate cur_do
select 交易日期,币种,交易金额 *rate As 交易总金额 from #tm
rollback tran