从表

时间:2015-08-06 11:29:08

标签: sql sql-server

我有一个包含以下值的表

id Level Threshold
1   1     5000
2   2     10000
3   3     15000

我需要达到的是,当我通过6000时,我需要获得1级。 12000 Level 2和16000 Level 3?

6000 - Level 1
12000 - Level 2 
16000 - Level 3

有人能让我知道如何实现这一目标吗?

4 个答案:

答案 0 :(得分:1)

我从你的问题中理解的是,当用户提供6000时,它应该检查哪个值小于6000,因此它是5000,它的等级是1,与12000相同,所以它有两个输出为5000(level1)和10000(level2),但您需要最大值为10000(Level2)。所以根据这种理解,查询是:

 select max(LEVEL) from Table where Threshold< 6000;

答案 1 :(得分:0)

这样的SQL问题怎么样?

SELECT One.Level, One.Threshold
FROM
    TableName AS One,
    (SELECT MAX(Threshold) AS Maximum FROM TableName WHERE Threshold <= :value) AS Two
WHERE One.Threshold = Two.Maximum

:value替换为60001200016000或您感兴趣的任何值。内部查询会找到该值已达到的最大阈值。外部查询返回阈值的级别编号。

Disclaimar:我没有测试过这个。

答案 2 :(得分:0)

尝试下面的例子,可能是你想要的一个

create table #temp (id int, value int)

insert into #temp values (1, 6000)
insert into #temp values (2, 12000)
insert into #temp values (3, 15000)
insert into #temp values (4, 16000)


select * from #temp 

select id, ceiling(convert(float,value)/6000) as level, value   from #temp

答案 3 :(得分:0)

Fiddle Demo

create table temp (id int, level int, Threshold int);

insert into temp values (1,1, 5000);
insert into temp values (2,2, 10000);
insert into temp values (3,3, 15000);


select max(LEVEL) from temp where Threshold<= 8000; (8000 or any other value)