我需要支持 sql 查询
Posted
技术标签:
【中文标题】我需要支持 sql 查询【英文标题】:I need a support for sql query 【发布时间】:2019-05-21 15:45:16 【问题描述】:我有一个包含 3 列下限、上限、折扣金额的表格 我正在传递一个数字并查找它属于哪个范围并检索其折扣金额 但是我传递了一个不在此表中的数字,在这种情况下我需要表中的最后一个范围折扣金额 我需要一个相同的 sql 查询
0-10 100
11-20 200
21-30 300
如果我通过 5 需要获得 100
如果我通过了 15 200 作为结果
但如果我超过 50,我需要得到 300 作为结果
即。如果传递的值不在范围内,则需要获得最高范围的折扣金额。
请帮忙。见了
【问题讨论】:
请提供样本数据、所需结果和适当的数据库标签。如果表格中有空隙怎么办? 0-10 100 , 11-20 200 , 21-30 300 如果我通过 5 需要获得 100 ,如果我通过 15 200 结果,但如果我通过 50 我需要获得 300 使用该信息编辑问题。要格式化为code
,请选择文本并按ctrl-k
或在每行前添加4 个空格
发布到目前为止您编写的脚本。这将有所帮助,因为您已经获得了初始两个范围的正确输出。
【参考方案1】:
试试这个。您也可以在脚本中直接传递/使用@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
【讨论】:
【参考方案2】:使用 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。
【讨论】:
如果给定数字没有范围,那么它将给出最高范围的折扣金额? 它将给出最高的折扣金额(基于您的示例数据)。 select max(discount) from tablename where not exists (select 1 from tablename where x between lowerrange and upperrange ) 你能解释一下这段代码吗? Select 1 的意思 选择1表示存在符合该条件的行。 So not exits.. 表示没有符合该条件的行,在这种情况下获取最大折扣以上是关于我需要支持 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
pd.read_sql - 不支持的格式字符错误 (0x27)