请教一个关于分段查询的SQL语句!!

lishijie910123 2012-10-23 03:04:43
表结构:
上限值 代理费率
0 0.009
50 0.008
100 0.007
200 0.005
比如我有这样一个表,我输入一个值为150,150是大于100,并且小于200,它所对应的代理费率为0。007;
比如我输入80,查出的代理费率应该为0.008,这问这个SQL语句该怎么写?
感谢各位帮忙!!!!
...全文
202 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
汤姆克鲁斯 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

1楼已经给出了正确答案。
不过我还是想唠叨一下,通常情况下,这种表格设计,会把上限值和下限值都写在一行中,上一行的最大值和下一行的最小值一般都是两个不相等的相邻数, 这样判断数据就非常简单了。
[/Quote]
慢一楼一步
lishijie910123 2012-10-23
  • 打赏
  • 举报
回复
谢谢各位,结贴了!
开启时代 2012-10-23
  • 打赏
  • 举报
回复
declare @IN int
set @IN=80
select top 1 代理费率 from tb where 上限值<=@IN order by 上限值 desc
發糞塗牆 2012-10-23
  • 打赏
  • 举报
回复
我想知道等于的时候是取上面还是下面的值
 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 行受影响)


*/
shoppo0505 2012-10-23
  • 打赏
  • 举报
回复
1楼已经给出了正确答案。
不过我还是想唠叨一下,通常情况下,这种表格设计,会把上限值和下限值都写在一行中,上一行的最大值和下一行的最小值一般都是两个不相等的相邻数, 这样判断数据就非常简单了。
lishijie910123 2012-10-23
  • 打赏
  • 举报
回复
兄弟的思路不错,查询第一个比参数小的值,这样写也比较方便,多谢!!
汤姆克鲁斯 2012-10-23
  • 打赏
  • 举报
回复
如果刚好相等就取对应的代理费率
那么的在加个等号

SELECT TOP 1 [代理费率] FROM #tb WHERE [上限值]<=100 ORDER BY [上限值] DESC 
汤姆克鲁斯 2012-10-23
  • 打赏
  • 举报
回复
SELECT TOP 1 [代理费率] FROM #tb WHERE [上限值]<80 ORDER BY [上限值] DESC 
spiritofdragon 2012-10-23
  • 打赏
  • 举报
回复
select top 1 代理费率
from tb
where 上限值<=@参数
order by 上限值 desc

--不过,按你的表述,字段应该叫下限值才对。呵呵。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧