所有人
我有4个向量V1,V2,V3,V4,我想在SQL查询中循环运行。对于我的SQL查询,每个向量都是此格式的数字列表(“ 8001”,“ 8002”,“ 8003”)。
如果我进行vlist <- list(c(V1, V2, V3,V4))
,请给我一个列表
> vlist
[[1]]
[1] "'84035','84040','84037','84013','84036','84030','84026','84016','84020','84012','84019'"
[2] "'84010','84039','84029','84031','84022','84032','84044','84034','84041','84042','84043'"
查询
#my code for the SQL query
vQuery <- infuse("SELECT TOP (1000) [PKID]
,[Equipment]
,[Order]
,[ActStartDate]
,[ActFinDate]
,[ActStartTime]
,[ActFinTime]
FROM [sapData].[dbo].[SAP_IW_47]
where Equipment IN ({{Vectors}})
and OrdCat = 'ZWAR'
and AcTyAct like '%TUT'
and ActStartDate BETWEEN '{{start}}' AND '{{end}}'"
, Vectors= #???, start = startdate, end = enddate)
# make it a data table
VectorQuery <- queryDataHub(vQuery)
vTable <- data.table(VectorQuery)
我想在插入Vectors= #??
的vQuery中输入V1,V2,...。现在,我正在尝试做一个可能的for循环来运行上面的代码,并且当vTable
代码运行时,我有4个数据表V1table,V2表,...的输出。循环为此最好。我可以复制和粘贴整个代码4次,但想将其压缩下来。
答案 0 :(得分:0)
请考虑为您的接收矢量元素的过程设置已定义的方法。然后使用lapply
,它是一个迭代函数,它返回长度相等的列表对象作为其输入。
与for
循环不同,lapply
避免了簿记任务,即初始化一个空列表并在每次迭代中为其分配元素,顺便说一句,这样做也很好。
proc_query <- function(v) {
vQuery <- infuse("SELECT TOP (1000) [PKID]
,[Equipment]
,[Order]
,[ActStartDate]
,[ActFinDate]
,[ActStartTime]
,[ActFinTime]
FROM [sapData].[dbo].[SAP_IW_47]
where Equipment IN ({{Vectors}})
and OrdCat = 'ZWAR'
and AcTyAct like '%TUT'
and ActStartDate BETWEEN '{{start}}' AND '{{end}}'"
, Vectors= v, start = startdate, end = enddate)
# make it a data table
VectorQuery <- queryDataHub(vQuery)
return(data.table(VectorQuery))
}
# LIST OF DATA TABLES
vTables <- lapply(vlist, proc_query)
或者使用for
循环:
# INITIALIZE EMPTY LIST WITH DEFINED LENGTH
vTables <- vector("list", length(vlist))
for (i in seq_along(vlist)) {
# UPDATE ELEMENTS
vTables[[i]] <- proc_query(vlist[[i]]) # STILL CALLING DEFINED FUNCTION
}