将R链接到HANA时如何在SQL查询中选择全部或部分向量
Posted
技术标签:
【中文标题】将R链接到HANA时如何在SQL查询中选择全部或部分向量【英文标题】:How to choose all or a subset of a vector in SQL query when linking R to HANA 【发布时间】:2017-05-31 04:20:36 【问题描述】:我正在使用 R 链接 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 = ", "),')
【问题讨论】:
使用if
声明。 if (IDlist == all)
完全省略 where
子句。
您能否说得更具体一些。例如,我的 WHERE 是:WHERE "date" BETWEEN',StartDate,'AND',EndDate,' AND "office" IN (',paste(myOffice, collapse = ", "),')。 StartDate 和 EndDate 是两个 R 变量。 paste(myOffice, collapse = ", ") 是一个 R 粘贴函数。如果在这里,我该如何输入?
把完整的where
子句放在你的问题中,我会给出答案。
【参考方案1】:
可能是这样的:
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链接到HANA时如何在SQL查询中选择全部或部分向量的主要内容,如果未能解决你的问题,请参考以下文章
如何将子查询的值存储到 Hana Studio 中的变量中?