将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 的末尾即可。如果IDlistall,那么您将粘贴在一个空白字符串上,否则您将粘贴在 ID 子句上。 (请注意,我假设 all 是一个变量,因为这就是您在问题中使用它的方式。)

【讨论】:

我想我明白了。非常感谢

以上是关于将R链接到HANA时如何在SQL查询中选择全部或部分向量的主要内容,如果未能解决你的问题,请参考以下文章

用R从Hana数据库查询数据,处理引号

如何将子查询的值存储到 Hana Studio 中的变量中?

使用 SQL Hana 对数据进行分组

如何将 Access 查询迁移到 SQL 视图?

R 将所需变量从 ODBC/HANA 连接传递到 sql 语句

SAP HANA SQL - 将单个列的多个结果行合并为单个行