基于不同表中的上限和下限对表进行分组

时间:2015-10-06 16:24:58

标签: sql sql-server

我有两张桌子和一张桌子。使用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人,但只是展示了一个例子。

1 个答案:

答案 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子句中的逻辑。