Sql server 具有多个条件的表联接

Sql server 具有多个条件的表联接,sql-server,Sql Server,我很难给出表连接的条件。突出部分是我需要解决的3个条件。基本上,有一些证券的有效期限,如果值在0到2之间,则得分为1;如果值在2到10之间,则得分为2;如果值大于10,则得分为4 对于前两个条件,在查询的where部分中,我这样解决它们 但是,对于第三个条件,如果Descriptsec为空,我不太确定我能做什么,有人能帮忙吗?您能更改您正在使用的查找表([Risk].[dbo].[FILiquidityBuckets])吗 如果是,请执行以下操作: 添加边界,使表如下所示: Metric-Des

我很难给出表连接的条件。突出部分是我需要解决的3个条件。基本上,有一些证券的有效期限,如果值在0到2之间,则得分为1;如果值在2到10之间,则得分为2;如果值大于10,则得分为4

对于前两个条件,在查询的where部分中,我这样解决它们


但是,对于第三个条件,如果Descriptsec为空,我不太确定我能做什么,有人能帮忙吗?

您能更改您正在使用的查找表([Risk].[dbo].[FILiquidityBuckets])吗

如果是,请执行以下操作:

添加边界,使表如下所示:

Metric-DescriptLowerBound-DescriptUpperBound-LiquidityScore
Effective term-0-2-1
Effective term-2-10-2
Effective term-10-9999999(some absurd high number)-4
那么您的加入条件可以是:

 ON FB3.Metric='Effective term' 
    AND CAST(sa.effectiveTerm AS INT) BETWEEN CAST(FB3.DescriptLowerBound AS INT) 
          AND CAST(FB3.DescriptLowerBound AS INT)
请注意,BETWEEN包含在内,因此在边缘情况下(值正好为2或10),将捕获较低的分数

我可以看到一些问题:sa别名表中的有效项是浮点。所以你应该考虑上下舍入。

总的来说,很多事情是可以改变/改进的,但我试图提供一个即时的解决方案


希望这能有所帮助。

您不应该发布截图来提供代码和数据。发布实际文本和一些DML。此外,您的屏幕截图可能会显示潜在的敏感用户或公司信息。我已经提交了删除它们的编辑,但是您应该尽快删除它们。您可以检查空值并使用CASE语句设置为
NULL
或某个有效整数值。您应该阅读以下内容:但这正是我所做的。我的问题仍然是,我不能将有效期限大于10的情况包括在内,因为您没有这样做。以一个测试用例为例:第一行的effectiveTerm为19.273。。。在您当前的逻辑中,它返回NULL,因为您没有捕获任何条件的记录。DescriptSec中有一个空字符串。用一个很高的数字替换这个字符串,它就会工作。我只是指出查找表和连接条件的糟糕设计。