2017-02-24 36 views
1

的问题 -应用或用于循环在SQL查询R.

如何使用应用函数或for循环,以便在不同的值以下运行此查询

运行查询

dbgetQuery(conn, " SELECT ID , Name , Date , Product 
        FROM table xyz 
        where Year = i ") 

其中i为年(2010年至2016年)

如何获得 table.2011 = 2011年的数据(ID,名称,日期,产品) table.2012 =数据f或2012年(ID,名称,日期,产品) 等等..每年。

+0

你正在使用什么类型的数据库? (由于DBI中的所有数据库都不相同,因此所有数据库在DBI中都有所不同),因此驱动如何执行参数化查询。有关“数据框架列表”的SO有很多问题,因为'dbGetQuery'应该返回一个数据。框架,方法将是相同的。 (这是一个强烈的建议*反对*有'table.2011'和'table.2012',而不是'list'data.frames。) – r2evans

+0

确定如何获取这个问题中的data.frames列表。 SQL Db,通过JDBC连接 – Pb89

+0

'sapply(2010:2016,function(i)dbGetQuery(conn,“...”))'。你不应该直接将值插入到查询字符串中,而应该使用[参数化查询](http://stackoverflow.com/questions/4712037/what-is-parameterized-query)。不幸的是,*所有的数据库都以不同的方式做* 'RPostgres'使用'$ 1','RSQLite'使用':varname','RSQLServer'使用'?1'等。你说*“SQL Db”*不会缩小范围。 *“你在使用什么类型的数据库?”(续...) – r2evans

回答

-1
year <- factor(c(2010,2011,2012,2013,2014,2015,2016)) 

for(i in levels(year)) 

{ 

assign(paste0('table.',i),dbgetQuery(conn, paste("SELECT ID , Name , Date , Product FROM table xyz where Year = '",i,"';"))) 

}