SQL:将列的每个记录与一系列值进行比较

SQL:将列的每个记录与一系列值进行比较,sql,sql-server-2008,Sql,Sql Server 2008,我有一个SQL查询,它返回表1中列出的数据。我想比较table1.Count列和table2.Count\u列的范围。应返回计数值在其相关值列中的范围 表1: Time Count 2014/02/24 00:00 23.3 2014/02/24 01:00 43.1 2014/02/24 02:00 93.5 2014/02/24 03:00 123.9 2014/02/24 04:00 173.0 2014/02/24 05:00 223.

我有一个SQL查询,它返回表1中列出的数据。我想比较table1.Count列和table2.Count\u列的范围。应返回计数值在其相关值列中的范围

表1:

Time               Count
2014/02/24 00:00   23.3
2014/02/24 01:00   43.1
2014/02/24 02:00   93.5
2014/02/24 03:00   123.9
2014/02/24 04:00   173.0
2014/02/24 05:00   223.7
...
...
表2:

Count_Range   Value
10            1
20            2
30            3
40            4
50            5
...
...
例如,在00:00时,该值为23.3,从表2中可以看出,该值在20到30之间,因此返回的值应为2。同样,对于01:00,返回的值应为4

最后的表格如下所示

拟议产出表3:

Time               Count   Value
2014/02/24 00:00   23.3    2
2014/02/24 01:00   43.1    4
2014/02/24 02:00   93.5    ...
2014/02/24 03:00   123.9   ...
2014/02/24 04:00   173.0   ...
2014/02/24 05:00   223.7   ...

提前感谢大家。。。顺便说一句,这是我在这个论坛上的第一个问题,事实上是地球上任何论坛的第一个问题

您可以使用相关子查询执行此操作:

select t1.*,
       (select top 1 t2.value
        from table2 t2
        where t2.count_range < t1."count"
        order by t2.count_range desc
      ) as value
from table1 t1;

我更喜欢第一种方法,因为它是除top关键字之外的标准SQL。

另一种方法是首先将计数范围列分为每个范围的低值和高值:

低高值 0 9 0 10 19 1 20 29 2 30 39 3 40 49 4 50 59 5 ... ... ...

然后使用以下查询:

选择表1.计数,表2.值 从表2内部连接表1 在表1上。计数>=表2.LowRange
表1.Count您可以使用一个简单的子查询来实现这一点:

SELECT *, 
(SELECT MAX(value) FROM table2 WHERE Count_Range <= table1.Count) AS VALUE 
FROM table1
在现有表2中,还必须为范围0到10添加一行


请注意,表2仅包含前11行以显示其工作原理

感谢Gordon和所有其他人的帮助。我同意戈登提供的第一个解决方案。我做了一个小小的改变,我做了一个比较
SELECT *, 
(SELECT MAX(value) FROM table2 WHERE Count_Range <= table1.Count) AS VALUE 
FROM table1