【问题标题】:I need a support for sql query我需要支持 sql 查询
【发布时间】: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 个空格
  • 发布到目前为止您编写的脚本。这将有所帮助,因为您已经获得了初始两个范围的正确输出。

标签: sql


【解决方案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.. 表示没有符合该条件的行,在这种情况下获取最大折扣
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多