Если вам действительно нужно использовать цикл for, чтобы выполнить запрос только для определенных клиентов, то вы можете сделать:
for (i in 1:length(customers_id)) {
sql_q <- paste0("SELECT '", names(customers_id)[i], "' AS customer, sum(value) AS value FROM db WHERE id IN (", paste(customers_id[[i]], collapse = ", "), ")")
}
sql_q
возвращает
[1] "SELECT 'John' AS customer, sum(value) AS value FROM db WHERE id IN (1, 2, 3)"
[1] "SELECT 'Rick' AS customer, sum(value) AS value FROM db WHERE id IN (4)"
[1] "SELECT 'Sam' AS customer, sum(value) AS value FROM db WHERE id IN (5, 6)"
Затем просто добавьтеданные, чтобы получить ваш результат, например
# Example Data given
customers_id <- list(John = c(1,2,3), Rick = c(4), Sam = c(5,6))
# Assuming you have your db connection setup in 'con'
sql_list <- list()
for (i in 1:length(customers_id)) {
sql_q <- paste0("SELECT '", names(customers_id)[i], "' AS customer, sum(value) AS value FROM db WHERE id IN (", paste(customers_id[[i]], collapse = ", "), ")")
sql_d <- sqlQuery(con, sql_q)
sql_list[[i]] <- sql_d
}
combined_d <- do.call("rbind", sql_list)