我有两张桌子和一张桌子。使用SQL Server 2012
tblBondFund
Name Maturity Wgt
ABC 2.4 8
NBV 6 7
LPM 9 2
KOP 4 5.5
tblLimits
LowerLimit UpperLimit
1 5
6 8
8 10
在我解释我之后的情况之前,如果我展示我需要的最终结果可能会更容易,
Limit wgt
1 - 5 13.5
6 - 8 7
9 - 10 2
所以在我的tblBondFund中,我想将所有到期日在一定范围内的债券分组 - 范围在我的tblLimits中。
目前我如何实现我的结果,用下面的where子句查询我的tblBondFund,
where Maturity >= 1 and Maturity < 5
我想知道是否有更好的方法可以做到这一点?通常情况下会有更多的团体而不是3人,但只是展示了一个例子。
答案 0 :(得分:1)
您可以使用left join
:
select replace(replace('@l - @u', '@l', l.lowerlimit), '@u', l.upperlimit) as limit,
sum(bf.wgt) as wgt
from tblLimits l left join
tblBondFund bf
on bf.maturity >= l.lowerlimit and bf.maturity <= l.upperlimit
group by l.lowerlimit, l.upperlimit
order by l.lowerlimit;
当您意识到逻辑删除了5到6之间的值时,您需要更改限制表或调整on
子句中的逻辑。