请教一个关于分段查询的SQL语句!!
表结构:
上限值 代理费率
0 0.009
50 0.008
100 0.007
200 0.005
比如我有这样一个表,我输入一个值为150,150是大于100,并且小于200,它所对应的代理费率为0。007;
比如我输入80,查出的代理费率应该为0.008,这问这个SQL语句该怎么写?
感谢各位帮忙!!!!
[解决办法]
select top 1 代理费率
from tb
where 上限值<=@参数
order by 上限值 desc
--不过,按你的表述,字段应该叫下限值才对。呵呵。
[解决办法]
SELECT TOP 1 [代理费率] FROM #tb WHERE [上限值]<80 ORDER BY [上限值] DESC
[解决办法]
1楼已经给出了正确答案。
不过我还是想唠叨一下,通常情况下,这种表格设计,会把上限值和下限值都写在一行中,上一行的最大值和下一行的最小值一般都是两个不相等的相邻数, 这样判断数据就非常简单了。
[解决办法]
我想知道等于的时候是取上面还是下面的值
DECLARE @a INT =80 ;WITH test ( 上限值, 代理费率 ) AS ( SELECT 0 , 0.009 UNION ALL SELECT 50 , 0.008 UNION ALL SELECT 100 , 0.007 UNION ALL SELECT 200 , 0.005 ) SELECT TOP 1 * FROM test WHERE 上限值<=@a ORDER BY 上限值 DESC /* 上限值 代理费率 ----------- --------------------------------------- 50 0.008 (1 行受影响) */
[解决办法]
declare @IN int
set @IN=80
select top 1 代理费率 from tb where 上限值<=@IN order by 上限值 desc