我有一张桌子,上面有3列下限,上限,折扣金额 我传递一个数字,找到它属于哪个范围并获取其折扣金额 但是我传递的数字在这种情况下不在此表中,我需要表中的最后一个范围折扣金额 我需要相同的SQL查询
0-10 100
11-20 200
21-30 300
即。如果传递的值不在此范围内,则需要获得最高范围的折扣金额。
请帮助。米
答案 0 :(得分:0)
使用UNION ALL:
select discount
from tablename
where x between lowerrange and upperrange
union all
select max(discount) from tablename
where not exists (
select 1 from tablename
where x between lowerrange and upperrange
)
如果第一个查询未返回结果,则第二个查询将获取该值。
如果第一个查询返回结果,则第二个查询将不返回任何内容。
适用于所有主要的rdbms。
答案 1 :(得分:0)
尝试一下。您也可以直接在脚本中传递/使用@value。
DECLARE @Value INT
SET @Value = 35
SELECT SUM(DISCOUNT) Discount
FROM
(
SELECT
CASE
WHEN upper_range = (SELECT MAX(upper_range) FROM your_table) AND @Value > upper_range THEN DISCOUNT
WHEN @Value BETWEEN lower_range AND upper_range THEN DISCOUNT
ELSE 0
END
DISCOUNT
FROM your_table
) A
值35的输出是-
300