如何在SQL Server中按范围比较选择行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

我有T左边的表作为源表。

最终产量应如下,

我想只获取Actual值介于两者之间的行,与列和列Basic相关联。ModelLevel

例如,如果采用Model = HT65,则Actual23.2 的值介于两者之间Basic = 22 & 24,因此应在其中选择行Basic = 24。即以黄色突出显示,JF97也是如此。在这里您可以参考右侧表作为参考结果。

对于相同的模型,如果Actual是21,则应选择第一行level = 1,如下所示:

如果实际的列值大于值在基本 水平应标记为橙色高亮显示,如下图所示:

我没试过,因为它对我来说似乎很复杂。你的帮助将不胜感激。

提问于
用户回答回答于

我想你想要:

select t.*, t2.level
from t outer apply
     (select top (1) t2.*
      from t t2
      where t2.model = t.model and t2.basic >= t.actual
      order by t2.level asc
     ) t2;

请注意,这将返回NULL而不是字符串'out'。由于转换逻辑,混合字符串和数字会使查询复杂化。

用户回答回答于

你可以用简单的联合做到这一点。虽然有更复杂的方法可以执行此操作,但此流程允许您轻松查看两个单独的比较并根据需要进行调整。

从T中选择模型,级别,实际

在实际水平和基础之间

联盟

从T中选择模型,级别,“输出”

其中实际>基本

扫码关注云+社区

领取腾讯云代金券