【问题标题】:How to select rows by range comparison in SQL Server?如何在 SQL Server 中通过范围比较选择行?
【发布时间】:2019-05-28 18:30:14
【问题描述】:

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

最终输出应如下所示,

我只想获取Actual 值介于Basic 之间的那些行,这些行与ModelLevel 列相关联。

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

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

如果Actual列值大于Basic中的值Level应标记为out 以橙色突出显示,如下所示,

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

【问题讨论】:

    标签: r dplyr data-manipulation


    【解决方案1】:

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

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

    级别和基本之间的实际位置

    联合

    从 T 中选择模型、级别、'out'

    实际>基本

    【讨论】:

      【解决方案2】:

      我想你想要:

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

      【讨论】:

        猜你喜欢
        • 2013-06-12
        • 2014-09-01
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        相关资源
        最近更新 更多