日期:2014-05-17 浏览次数:20559 次
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