SQL:将列的每个记录与一系列值进行比较
我有一个SQL查询,它返回表1中列出的数据。我想比较table1.Count列和table2.Count\u列的范围。应返回计数值在其相关值列中的范围 表1: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.
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