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

时间:2019-05-28 18:30:15

标签: r dplyr data-manipulation

我在左侧有一个名为T的下表作为源表。

enter image description here

最终输出应如下所示,

enter image description here

我只想获取Actual值在Basic之间且与ModelLevel列相关联的那些行。

例如,如果您使用Model = HT65,则Actual的值为23.2介于Basic = 22 & 24之间,因此应在Basic = 24的位置选择该行。即以黄色突出显示,JF97也是如此。在这里,您可以将右侧表作为参考结果。

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

enter image description here

如果实际列的值大于基本 级别中的值,则应将其标记为 输出 以橙色突出显示,如下所示,

enter image description here

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

2 个答案:

答案 0 :(得分:0)

您可以通过一个简单的联合来做到这一点。尽管有更复杂的方法可以执行此操作,但此流程使您可以轻松查看两个单独的比较并根据需要进行调整。

从T中选择型号,级别,实际值

在实际水平和基本水平之间

联盟

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

实际>基本

答案 1 :(得分:0)

我想你想要

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'。由于转换逻辑,混合使用字符串和数字会使查询复杂化。