在PeopleSoft Query中实现IF ANY条件逻辑或SUMIF等效功能
解决PeopleSoft Query中请购单类型判定的SQL报错问题
错误原因分析
你的表达式存在两个核心语法问题:
CASE语句未闭合:缺少END关键字终止条件判断,这是触发ORA-00905报错的直接原因。GROUP BY位置错误:不能嵌套在SUM()函数的括号内,必须作为整个查询的子句放在末尾。
正确的SQL逻辑写法
基础聚合表达式(计算SR行数量)
SUM(CASE WHEN REQ_LINE.LN_TYPE = 'SR' THEN 1 ELSE 0 END) AS SR_LINE_COUNT
完整查询结构(含分组与类型判定)
如果要直接输出请购单类型,可通过外层CASE判断聚合结果:
SELECT REQ_HDR.BUSINESS_UNIT, REQ_HDR.REQ_ID, CASE WHEN SUM(CASE WHEN REQ_LINE.LN_TYPE = 'SR' THEN 1 ELSE 0 END) > 0 THEN 'SR' ELSE '其他类型' END AS REQUISITION_TYPE FROM REQ_HDR JOIN REQ_LINE ON REQ_HDR.BUSINESS_UNIT = REQ_LINE.BUSINESS_UNIT AND REQ_HDR.REQ_ID = REQ_LINE.REQ_ID GROUP BY REQ_HDR.BUSINESS_UNIT, REQ_HDR.REQ_ID
PeopleSoft Query中的操作步骤
- 添加关联表:将
REQ_HDR和REQ_LINE加入查询,设置关联条件(业务单元+请购单ID)。 - 设置分组字段:在PeopleSoft Query的「Group By」标签下,勾选
REQ_HDR.BUSINESS_UNIT和REQ_HDR.REQ_ID作为分组依据。 - 创建聚合计算字段:新建表达式字段,输入
SUM(CASE WHEN REQ_LINE.LN_TYPE = 'SR' THEN 1 ELSE 0 END),命名为SR_LINE_COUNT。 - 创建类型判定字段:再新建表达式字段,输入
CASE WHEN SR_LINE_COUNT > 0 THEN 'SR' ELSE '其他类型' END,命名为REQUISITION_TYPE。
通过以上步骤即可实现“只要请购单包含SR行就判定为SR类型”的业务逻辑,同时规避语法错误。
内容的提问来源于stack exchange,提问作者Aher
相关产品推荐
相关产品推荐

