2017-05-31 23 views
0

我正在使用R來鏈接HANA,以便我可以在R中使用SQL查詢來進行數據檢索。我的數據包含很多商店名稱。有時,我的查詢基於所有商店,可以輕鬆完成,無需在WHERE中設置任何限制。有時候,我只關注一些商店,比如商店1,2,3。我可以使用Providing lookup list from R vector as SQL table for RODBC lookup的答案來執行此操作。例如:如何在將R鏈接到HANA時在SQL查詢中選擇矢量的全部或子集

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是全部的,那麼查詢將是所有的商店名稱。當IDlist有一些特定的數字時,那麼查詢將只關注這些商店。

這只是我的想法。我不確定是否有更好的方法來做到這一點。無論如何,將所有名稱和一些名稱結合在一起,以便我可以在一個地方使用它們,因此,我不需要更改我的代碼。

在這裏,我哪裏是:

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 = ", "),') 

非常感謝。

+0

使用'if'語句。 'if(IDlist == all)'完全省略'where'子句。 – Gregor

+0

你能否更具體些?例如,我的WHERE是:WHERE「date」BETWEEN',StartDate,'AND',EndDate,' 和「office」IN(',paste(myOffice,collapse =「,」),')。 StartDate和EndDate是兩個R變量。粘貼(myOffice,collapse =「,」)是一個R粘貼功能。我如何在這裏放? –

+0

在你的問題中放上完整的'where'子句,我會給出答案。 – Gregor

回答

1

也許是這樣的:

office_clause = "" 
if (IDlist != all) { 
    office_clause = paste(
     'AND "a"."/BIC/ZSALE_OFF" IN (', 
     paste(IDlist, collapse = ', '), 
     ')' 
    ) 
} 

然後你就可以構建您的查詢,只是在where結束粘貼office_clause。如果IDlistall,那麼您將粘貼一個空白字符串,否則您將粘貼在ID子句上。 (請注意,我假設all是一個變量,因爲這是您在問題中使用它的方式。)

+0

我想我明白了。非常感謝 –