iT邦幫忙

0

MSSQL 月底資料遞移

TableA

日期 匯率
2019/10/31 30.106
2019/11/30 30.226
2019/12/01 30.218
2019/12/02 30.236
2019/12/03 30.188

TableB

日期 匯率 上月底匯率
2019/10/31 30.106 30.888
2019/11/30 30.226 30.106
2019/12/01 30.218 30.226
2019/12/02 30.236 30.226
2019/12/03 30.188 30.226

TableB 20191130 的上月底匯率為 TableA 20191031的匯率
TableB 20191201 的上月底匯率為 TableA 20191130的匯率
TableB 20191202 的上月底匯率為 TableA 20191130的匯率
TableB 20191203 的上月底匯率為 TableA 20191130的匯率

將 TableA 變成 TableB , MS SQL 要如何寫 ?

1 個回答

1
純真的人
iT邦高手 1 級 ‧ 2019-12-04 14:36:38
最佳解答

其實這筆 2019/10/31 30.106 30.888
第一筆不會有匯率的..所以補當日匯率..

declare @Tab table(
	日期 date
	,匯率 decimal(18,3)
)
insert into @Tab
values('2019/10/31','30.106')
,('2019/11/30','30.226')
,('2019/12/01','30.218')
,('2019/12/02','30.236')
,('2019/12/03','30.188')

select a.*
,isNull((
	select top 1 b.匯率
	from @Tab as b
	where year(dateadd(m,-1,a.日期)) = year(b.日期)
	and month(dateadd(m,-1,a.日期)) = month(b.日期)
	order by b.日期 desc
),a.匯率) 上月底匯率
from @Tab as a

https://ithelp.ithome.com.tw/upload/images/20191204/20061369OqGmBojPIR.png

我覺得把table B 多一個月底欄位 去JOIN TABLE A 效能會比較高 哈哈

我要發表回答

立即登入回答