在where子句中使用sum函数

时间:2017-07-12 18:04:52

标签: sql oracle oracle-fusion-apps

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

这个查询给了我想要的东西,但是我不能将这个总和与选择 -

一起使用
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
)

非常感谢任何意见和建议。

3 个答案:

答案 0 :(得分:0)

我没有使用Fusion应用程序 如果我不明白错误,那么您在选择中对字符限制和功能有限制。

你的'在哪里'条款很长,考虑到你的性格限制。您可以使用ALIAS缩短数据库级别的列和表。然后自定义您的查询。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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