我在数据库中有一个表为“EXPERIENCE RANGE”,其中包含行(我也可以根据需要编辑此表)
0
0.5
1
2
3
5
10
20
我有整数经验。我需要显示它所在的范围。
示例 - 对于8的经验,范围将是5 - 10
我需要编写一个sql查询。任何想法都会非常有用,因为我不熟悉SQL。
我无法对其进行硬编码。只需要从表中获取值。
答案 0 :(得分:1)
假设您使用的是Oracle,以下查询可以与现有表一起使用:
SELECT
( SELECT MAX( value ) FROM experience_range WHERE value <= :search_value ) AS range_start,
( SELECT MIN( value ) FROM experience_range WHERE value > :search_value ) AS range_end
FROM dual;
无需对值进行硬编码,也无需冗余地存储下限和上限。
答案 1 :(得分:0)
您可以使用CASE Expression执行此操作,语法为:
SELECT
CASE
WHEN experience >= 0 and experience <= 4 THEN '0-4'
WHEN experience >= 5 and experience <= 10 THEN '5-10'
.....
ELSE 'No Range'
END as Range
FROM Table_Name
答案 2 :(得分:0)
如果你确实需要将范围存储在表格中,我个人建议改变范围表的结构(假设你能够),可能是这样的:
|--------------------------------------|
|ID|DESCRIPTION|LOWER_LIMIT|UPPER_LIMIT|
|1 | 0 - 0.5 | 0 | 0.5 |
|2 | 0.5 - 1 | 0.5 | 1 |
...
然后你可以通过运行类似的东西来获得你的范围:
SELECT DESCRIPTION FROM [RANGES] WHERE <VALUE> >= LOWER_LIMIT AND <VALUE> < UPPER_LIMIT
编辑--Mikhail的答案也有效,定义查询本身的范围也是一个选项,可能更简单,只要您不需要从多个报告中获取这些范围。 (这需要单独编辑每个报告/查询)
编辑2 - 我发现你无法对范围进行硬编码,在这种情况下,上述情况最好。我可以问你为什么不能对它们进行硬编码吗?