【问题标题】:SQL Sum Using logic to choose Plus or Minus (Oracle)SQL Sum 使用逻辑选择加号或减号 (Oracle)
【发布时间】:2023-03-30 21:56:01
【问题描述】:

不确定这在直接 SQL 中是否可行。

是否可以使用 CASE 语句或类似逻辑之类的方法来选择求和运算符。

例如

select 
  (select 1 from dual) 
  (case when (select 1 from dual) = 1 then + else - end) 
  (select 2 from dual)
from dual

作为回报。

【问题讨论】:

  • 我认为发布你的问题比那个查询更好,如果你提供你的问题和你需要做什么,你可能会以其他方式得到更好的解决方案

标签: sql oracle


【解决方案1】:

-+ 不能是 CASE WHEN 的结果,因为它们不是值。 -1+1 然而是。将此-1+1 与所需值相乘以获得正值或负值。例如:

select case when type = 'withdrawal' then -1 else +1 end * value as balance_change

你的例子:

select
  (select 1 from dual) +
  (case when (select 1 from dual) = 1 then +1 else -1 end) *
  (select 2 from dual)
from dual

【讨论】:

    【解决方案2】:
    select   1  + (case when (select 1 from dual) = 1 then +1 else -1 end) from dual
    

    我的意思是:

    with
        sub_q as (
            select 2000 val1, -1500 val2 from dual
            union all
            select 1000 val1, +2000 val2 from dual
        )
    select val1, val2, SIGN(val2) s, val1 + (case when SIGN(val2) = 1 then +val2 else -val2 end)  res
    from sub_q
    

    【讨论】:

    • 感谢您的回复,这可以应用于子查询粗略示例,例如select -1500 (case when sign((select -100 from dual)) = -1 then + else - end) 2000 from dual .... 我想用一些子查询进行计算,而不必将子查询放在多个次如果有意义的话。值 - 1500 和 2000 将来自子选择。
    猜你喜欢
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多