【问题标题】:Use sum function in where clause在 where 子句中使用 sum 函数
【发布时间】:2017-12-17 07:09:27
【问题描述】:

我正在使用 oracle fusion,我正在使用的其中一个应用程序(值集)不允许我在 select 语句中使用函数,并且 from 部分有 200 个字符的限制。

这个查询给了我我想要的,但我不能用 select- 使用 sum-

SELECT SUM(d.ABS_UNITS) from PER_ALL_PEOPLE_F b, ANC_ABSENCE_PLANS_F_TL c, 
ANC_PER_ABS_PLAN_ENTRIES d
WHERE 
d.PERSON_ID = b.PERSON_ID
AND c.ABSENCE_PLAN_ID = d.ABSENCE_PLAN_ID
AND c.name = 'FMLA LWOP'
and d.start_date between '2017-04-02' and '2017-04-15'
AND b.PERSON_NUMBER = p_num

我也试过了,但遇到字符限制问题 -

Select aa.bb from
(SELECT SUM(d.ABS_UNITS) as bb from PER_ALL_PEOPLE_F b, 
ANC_ABSENCE_PLANS_F_TL c, ANC_PER_ABS_PLAN_ENTRIES d
WHERE 
d.PERSON_ID = b.PERSON_ID
AND c.ABSENCE_PLAN_ID = d.ABSENCE_PLAN_ID
AND c.name = 'FMLA LWOP'
and d.start_date between '2017-04-02' and '2017-04-15'
AND b.PERSON_NUMBER = p_num
) aa

这种方法是我一直在尝试将总和放在 where 子句中的方法,但它没有返回任何内容。

Select
d.ABS_UNITS
FROM
PER_ALL_PEOPLE_F b, ANC_ABSENCE_PLANS_F_TL c, ANC_PER_ABS_PLAN_ENTRIES d
WHERE 
d.PERSON_ID = b.PERSON_ID
AND c.ABSENCE_PLAN_ID = d.ABSENCE_PLAN_ID
AND c.name = 'FMLA LWOP'
AND b.PERSON_NUMBER = pnum
and d.start_date between '2017-04-02' and '2017-04-15'
AND d.ABS_UNITS = (SELECT SUM(d.ABS_UNITS) from PER_ALL_PEOPLE_F b, 
ANC_ABSENCE_PLANS_F_TL c, ANC_PER_ABS_PLAN_ENTRIES d
WHERE 
d.PERSON_ID = b.PERSON_ID
AND c.ABSENCE_PLAN_ID = d.ABSENCE_PLAN_ID
AND c.name = 'FMLA LWOP'
and d.start_date between '2017-04-02' and '2017-04-15'
AND b.PERSON_NUMBER = pnum
)

任何意见和建议将不胜感激。

【问题讨论】:

  • 您可能需要一个带有SUMGROUP BY 并需要一个HAVING 子句,该子句充当聚合金额的WHERE
  • 我没有接触过融合应用。查看数据模型,我不清楚您是否要对 ABS_UNITS 求和。您是否尝试过创建查询视图?
  • Oracle fusion 是否支持使用 WITH 子句?如果是这样,也许可以利用它?
  • 您不能只在原始文件中使用 HAVING 子句:SELECT SUM(d.ABS_UNITS) from PER_ALL_PEOPLE_F b, ANC_ABSENCE_PLANS_F_TL c, ANC_PER_ABS_PLAN_ENTRIES d WHERE d.PERSON_ID = b.PERSON_ID AND c.ABSENCE_PLAN_ID = d.ABSENCE_PLAN_ID AND c.name = 'FMLA LWOP' 和 d.start_date 在 '2017-04-02' 和 '2017-04-15' 之间有 b.PERSON_NUMBER = p_num
  • 很遗憾,我在该区域也无法使用 HAVING 和 GROUP BY。

标签: sql oracle oracle-fusion-apps


【解决方案1】:

我没有使用过融合应用程序。
如果我没有理解错,您对 select 中的字符数和功能有限制。

考虑到您的字符数限制,您的“where”子句很长。您可以对数据库级别的列和表使用 ALIAS 来缩短它。然后自定义您的查询。

【讨论】:

    【解决方案2】:

    感谢您的所有意见,我非常感谢。我找到了一个解决方法,Oracle Fusion 在我正在使用的脚本语言中隐藏了未记录但可以通过 sql 找到的函数。非常令人沮丧,但感谢所有反馈

    【讨论】:

      【解决方案3】:

      您不能在WHERE 子句中使用聚合函数(例如SUM),因为WHERE 在物理上限制了行。您应在GROUP BY 子句中聚合以在逻辑上限制输出。

      【讨论】:

      • 但是如果他的选择列表中有聚合,你可以限制使用“有子句”
      • 我说的是否与您的评论相反,或者我的回答有误?问题的标题是“在where子句中使用sum函数”,我建议如何正确使用聚合。
      猜你喜欢
      • 2017-05-20
      • 2018-05-17
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      相关资源
      最近更新 更多