SQL query to translate a list of numbers matched against several ranges, to a list of values

后端 未结 2 1740
臣服心动
臣服心动 2020-12-07 00:02

I need to convert a list of numbers that fall within certain ranges into a list of values, ordered by a priority column. The table has the following values:

         


        
2条回答
  •  醉梦人生
    2020-12-07 00:30

    I think your first task would be to convert the list of numbers into a result set (ie. in-memory table) that you can join to. I don't know Oracle, so there may be an easy way to do it, but if not you'll need to write some kind of user-defined function that does this. It shouldn't be too hard and performance is not an issue since the list is small. You can then do a join to that table. Something like this:

    SELECT yt.val
    FROM your_table yt
    JOIN your_parse_numbers_function(@inputlist) il
    ON il.value >= yt.R_MIN AND il.value <= yt.R_MAX
    WHERE yt.YEAR = @year
    

    You could limit that to 1 result if you wish, but if your assumption about ranges not overlapping is correct then it should only return 1 anyway.

提交回复
热议问题