将 R 链接到 HANA 时如何在 SQL 查询中选择向量的全部或子集
How to choose all or a subset of a vector in SQL query when linking R to HANA
我正在使用 R 来 link HANA,这样我就可以在 R 中使用 SQL 查询来检索数据。我的数据包括很多商店名称。有时,我的查询是基于所有的商店,这可以很容易地完成,而无需在 WHERE 中设置任何限制。有时,我只关注几家商店,比如商店 1、2、3。我可以使用 Providing lookup list from R vector as SQL table for RODBC lookup 的答案来做到这一点。
例如:
IDlist <- c(23, 232, 434, 35445)
paste("WHERE idname IN (", paste(IDlist, collapse = ", "), ")")
但是我如何将这两种情况(即所有名称或名称子集)结合在一个 WHERE 中?我期待类似的东西:
IDlist <- all
IDlist <- c(23, 232, 434, 35445)
paste("WHERE idname IN (", paste(IDlist, collapse = ", "), ")")
因此,当 IDlist 为 all 时,查询将针对所有商店名称。当 IDlist 有一些特定的数字时,查询将只关注这些商店。
这只是我的想法。我不确定是否有更好的方法。无论如何,将所有名称和一些名称组合在一起,以便我可以在一个 WHERE 中使用它们,因此,我不需要更改我的代码。
在这里,我的位置是:
myOffice <- c(416,247,602,428)
WHERE "a"."/BIC/ZARTICLE"<>\'GIFTCARDPU\' AND "a"."/BIC/ZRETURN"=\'X\'
AND "a"."CALDAY" BETWEEN',StartDate,'AND',EndDate,'
AND "a"."/BIC/ZSALE_OFF" IN (',paste(myOffice, collapse = ", "),')
也许是这样的:
office_clause = ""
if (IDlist != all) {
office_clause = paste(
'AND "a"."/BIC/ZSALE_OFF" IN (',
paste(IDlist, collapse = ', '),
')'
)
}
然后您可以构建查询,只需将 office_clause
粘贴到 where
的末尾即可。如果它 IDlist
是 all
,那么您将粘贴一个空字符串,否则您将粘贴 ID 子句。 (请注意,我假设 all
是一个变量,因为这就是您在问题中使用它的方式。)
我正在使用 R 来 link HANA,这样我就可以在 R 中使用 SQL 查询来检索数据。我的数据包括很多商店名称。有时,我的查询是基于所有的商店,这可以很容易地完成,而无需在 WHERE 中设置任何限制。有时,我只关注几家商店,比如商店 1、2、3。我可以使用 Providing lookup list from R vector as SQL table for RODBC lookup 的答案来做到这一点。
例如:
IDlist <- c(23, 232, 434, 35445)
paste("WHERE idname IN (", paste(IDlist, collapse = ", "), ")")
但是我如何将这两种情况(即所有名称或名称子集)结合在一个 WHERE 中?我期待类似的东西:
IDlist <- all
IDlist <- c(23, 232, 434, 35445)
paste("WHERE idname IN (", paste(IDlist, collapse = ", "), ")")
因此,当 IDlist 为 all 时,查询将针对所有商店名称。当 IDlist 有一些特定的数字时,查询将只关注这些商店。
这只是我的想法。我不确定是否有更好的方法。无论如何,将所有名称和一些名称组合在一起,以便我可以在一个 WHERE 中使用它们,因此,我不需要更改我的代码。
在这里,我的位置是:
myOffice <- c(416,247,602,428)
WHERE "a"."/BIC/ZARTICLE"<>\'GIFTCARDPU\' AND "a"."/BIC/ZRETURN"=\'X\'
AND "a"."CALDAY" BETWEEN',StartDate,'AND',EndDate,'
AND "a"."/BIC/ZSALE_OFF" IN (',paste(myOffice, collapse = ", "),')
也许是这样的:
office_clause = ""
if (IDlist != all) {
office_clause = paste(
'AND "a"."/BIC/ZSALE_OFF" IN (',
paste(IDlist, collapse = ', '),
')'
)
}
然后您可以构建查询,只需将 office_clause
粘贴到 where
的末尾即可。如果它 IDlist
是 all
,那么您将粘贴一个空字符串,否则您将粘贴 ID 子句。 (请注意,我假设 all
是一个变量,因为这就是您在问题中使用它的方式。)