如何解决通配符选择 where 语句中的所有结果?
我有一个参数化查询,其中包含为 WHERE 子句指定的各种条件,由宏变量设置:
```{r code_2.2}
library(psych)
describe(women_DF)
%LET criteria1 = 'XXXX';
%LET criteria2 = 'YYYY';
我根本不希望用户自己更改查询,但在参数化时可以选择绕过第二个过滤器。
解决方法
您需要添加一些代码生成逻辑。首先决定要使用的特殊值,例如 ALL,或者只是测试参数是否为空。然后你可以使用宏代码有条件地将子句添加到 WHERE。
PROC SQL;
SELECT *
FROM Table
WHERE 1=1
%if (%length(&criteria1) and "&criteria1" ne "ALL") %then %do;
AND Field1 IN (&criteria1.)
%end;
%if (%length(&criteria2) and "&criteria2" ne "ALL") %then %do;
AND Field2 IN (&criteria2.)
%end;
;
QUIT;
,
一种选择是重新制定您的方法并参数化整个谓词,以及引入默认值机制。我将用伪代码起草我的提案。
给定:
%LET criteria1 = 'XXXX';
%LET criteria2 = 'YYYY';
您的查询将类似于(注意伪语法:is_defined(...) ? {predicate} else {pass_through}):
SELECT *
FROM Table
WHERE
is_defined(&criteria1) ? Field1 IN (&criteria1) else 1=1
AND is_defined(&criteria2) ? Field2 IN (&criteria2) else 1=1
如果其中一个条件被遗漏,那么所有行都会过滤相应的谓词。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。