我需要myPS Query的帮助。这是如下:
SELECT A.EMPLID, B.STUDENT_ID, C.ADMIT_TERM, D.CHECKLIST_CD,
D.CHECKLIST_STATUS...
FROM TABLE1 A, TABLE2 B, TABLE3C, TABLE4 D...
WHERE……
AND A.EMPLID = :1
AND C.ADMIT_TERM = :2
AND D.CHECKLIST_CD = :3
AND D.CHECKLIST_STATUS = :4
….
现在有一些条件,其中未提供提示1,2,3和4,以下条件应该发生:
此时,如果所有提示都为空,我不知道如何添加条件。你能告诉我接下来需要做什么吗?子查询?表达
请帮助。
答案 0 :(得分:1)
这与Littlefoot的答案基本相同,但我会尝试添加一些有关如何实现该解决方案的更多细节。这是我所做的查询示例,与您尝试执行的操作类似,在ORDER_NO
字段上添加了一些调整,以演示您尝试执行的操作。我不知道如果没有提供所有提示,如何让它返回某些行,但是这将允许您为每个未提供的特定提示返回某些行。例如,如果您未提供核对表状态,则可以返回所有处于未完成和正在进行状态的学生。
请注意,这是PeopleSoft的一个非常旧的版本,因此您的界面可能不同。
首先,添加提示
现在,诀窍是让每个可选字段的WHERE
子句像WHERE (D.CHECKLIST_STATUS = :4 OR (:4 = '' AND D.CHECKLIST_STATUS IN ('I', 'P'))
一样工作(或者你的状态代码是什么)。这是如何做到的(再次,在我的旧版本)。 ORDER_NO
字段上的逻辑类似于您需要的逻辑。
确保正确设置AND/OR
运算符和括号。
点击'' equal to :2
条件的编辑按钮,这就是它的样子
SQL看起来像这样
现在,当您运行查询时,您留空的任何提示字段都将不会用于过滤结果,或者将使用该字段的默认值。
答案 1 :(得分:0)
在Oracle中,通常按如下方式处理:
select ...
from ...
where (a.emplid = :1 or :1 is null)
and (c.admint_term = :2 or :2 is null)
...
答案 2 :(得分:0)
使用 LIKE 代替 = 运算符。例如
SELECT A.EMPLID,B.STUDENT_ID FROM TABLE1 A. 哪里 AND A.EMPLID LIKE:1
如果要选择所有员工,则传递%in:1参数。