微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通配符选择 where 语句中的所有结果?

如何解决通配符选择 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 举报,一经查实,本站将立刻删除。