我创建了一个查询以从表中获取输出。如果参数为“FULL RUN”,我希望查询不具有任何条件并完全运行。如果属性参数为“Changed Attributes”,则我希望查询仅在last_update_date大于另一个表的处理日期时才给予结果。如何使用这种情况以及何时使用?
查询看起来像这样-
select * from
(SELECT DISTINCT fs.set_code,
GRADE_LAD.NAME
GRADE_LADDER,
To_char(GRADE_LAD.effective_start_date, 'yyyy/mm/dd')
GRADE_LAD_START_DATE,
GRADE_LAD.active_status,
GRADE_LAD.attribute1
SAL_PLAN_DESCR,
GRADE_LAD.attribute2
SHORT_DESCR,
Max(GRADE_LAD.last_update_date)
OVER(
partition BY GRADE_LAD.grade_ladder_id)
max_update_date
FROM fnd_setid_assignments fsa,
fnd_setid_sets_vl fs,
per_grade_ladders_f_vl GRADE_LAD,
fun_all_business_units_v bu
WHERE 1 = 1
AND fsa.determinant_value = bu.bu_id
AND fsa.determinant_type = 'BU'
AND fsa.set_id = fs.set_id
AND FS.set_id = grade_set_id
AND fsa.reference_group_name LIKE 'PER_GRADES'
AND :EffectiveDate BETWEEN GRADE_LAD.effective_start_date AND
GRADE_LAD.effective_end_date
--AND GRADE_LAD.NAME LIKE '%Test%'
)
where case when (:attribute = 'Full Run')
then 1
when (:attribute='Changed Attribute')
then
1
else 0
end = 1
字符串
现在我在“then”子句中传递1,但我希望完全运行then子句应该有1=1,但在更改属性的情况下,应该运行以下查询
max_update_date >=
Nvl(
(SELECT Max(processstart)
FROM fusion.ess_request_history erh,
fusion.ess_request_property erp
WHERE erh.requestid = erp.requestid
AND state = 12
AND erp.NAME = 'reportID'
AND erp.value LIKE '/Custom/Integrations/Extract.xdo'
),max_update_date)
型
2条答案
按热度按时间wb1gzix01#
你可以在
when
的情况下添加额外的条件:字符串
但是,忘记case表达式,只使用布尔逻辑会更简单:
型
pzfprimi2#
请给予旧的带有表列表的sintax,使用Join ON()sintax。基本上,如果你想在:attribute = 'Full Run'时显示所有行,并且你想在:attribute不同的情况下过滤行,那么你可以在:attribute = 'Full Run'时将Where子句中的独特列与其自身进行比较(始终为true),并在case表达式中将真实的条件放在else或另一个中。
类似下面的东西:
字符串