我正在尝试编写一个查询,我必须根据定义的变量在where子句中执行选择。
我的脚本如下所示:
def schd_yn ='Y';
def clin_schd = '1,2';
CREATE TABLE TEMP_SUBOPT AS
SELECT *
FROM P112921.SCHEDULE_DATA
WHERE clin_sch IN (CASE WHEN '&schd_yn.' = 'Y'
THEN &clin_schd.
ELSE clin_sch
END)
;
我想要做的就是从schd_yn设置为N的情况下获取源中的所有数据,并在schd_yn设置为Y的情况下仅采用clin_schd中定义的值。
如果您在clin_sched中只有1个值,此解决方案效果很好。
这些组合效果很好:
def schd_yn='Y'; //takes only clin_sch=1
def clin_schd='1';
def schd_yn='N'; //takes everything as expected
def clin_schd='1';
这些组合无法正常运行并产生错误:
def schd_yn='Y';
def clin_schd='1,2';
def schd_yn='N';
def clin_schd='1,2';
有人知道如何使这项工作吗?
谢谢
答案 0 :(得分:0)
你可以像这样使用:
select ...
from
your_table
where
def schd_yn='Y' and def clin_schd='1'
union all
select ...
from
your_table
where
def schd_yn='N' and def clin_schd='1';
答案 1 :(得分:0)
我想你想要这个逻辑:
WHERE (&schd_yn = 'N' OR clin_sch = &clin_schd)
你要求:
我想要做的就是从我的来源获取所有数据 例如,schd_yn设置为N,并且仅采用在中定义的值 如果schd_yn设置为Y,则为clin_schd。
如果schd_yn
只能是'N'
或'Y'
(我认为是合理的假设),则上述情况有效。更正式地说,你似乎想要:
WHERE (&schd_yn = 'N' OR (&schd_yn = 'Y' AND clin_sch = &clin_schd))