【问题标题】:case in where clause for specific values oracle特定值的 where 子句中的情况 oracle
【发布时间】:2020-11-06 08:16:55
【问题描述】:

我们有 2 张桌子,桌子 A 和桌子 B,

我们在 select 语句中获取 6 列, 这些是列

  1. A.current_value,
  2. A.original_value,
  3. A.current_tax_lot,
  4. B.current_tax,
  5. B.cost_tax,
  6. B.current_tax_cost

现在我们必须将数学条件放入查询中:

  1. A.current_value – B.current_tax 在 +/- 2 以内,并且

  2. 如果 A.original_value 为空,则使用 A.current_tax_lot 执行公式:

2a。 A.current_tax_lot(从上面)——B.cost_tax 在 +/- 10 以内,或者

2b。 A.current_tax_lot(从上面)– current_tax_cost 在 +/-10 以内)

【问题讨论】:

  • 家庭作业,很好!如果您遇到特定问题,可以在这里提问。但不要忘记添加示例表数据、预期结果和您的代码尝试。 (所有格式正确的文本,没有图像。)
  • 顺便说一句,您使用的是 MS SQL Server 还是 Oracle?
  • 应该自己做作业,无论如何这似乎是一个可以通过使用case轻松解决的问题,就像你的主题所说的......
  • @jarlh 它的预言机
  • @Craig 查询看起来不错,但我们为什么不使用(点 b)如果 A.original_value 为空白,请使用 A.current_tax_lot

标签: sql oracle oracle-sqldeveloper plsqldeveloper


【解决方案1】:

如果没有理解块/计算,请适当地替换术语/表达式。

Select  ...
Where 
      ABS(NVL(A.current_value, A.current_tax_lot) – B.current_tax) <=2
      AND 
      (
         ABS(A.current_tax_lot – B.cost_tax) <= 10 
         OR
         ABS(A.current_tax_lot – B.current_tax_cost) <= 10
      );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多