我需要对SQL查询的支持

时间:2019-05-21 15:45:17

标签: sql

我有一张桌子,上面有3列下限,上限,折扣金额 我传递一个数字,找到它属于哪个范围并获取其折扣金额 但是我传递的数字在这种情况下不在此表中,我需要表中的最后一个范围折扣金额 我需要相同的SQL查询

 0-10 100 
11-20 200 
21-30 300
  • 如果我通过5则需要获得100
  • 如果我的结果是通过15200
  • 但是如果我超过50分,我需要得到300分

即。如果传递的值不在此范围内,则需要获得最高范围的折扣金额。

请帮助。米

2 个答案:

答案 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