2017-09-24 18 views
1

AxiomaID가 포함 된 다음 데이터 프레임이 있습니다.R을 통해 SQL 쿼리에서 값 붙여 넣기

x<-c(0123, 234, 2348, 345, 3454) 

그리고

SQL6<-data.frame(sqlQuery(myConn, "SELECT top 10 [AxiomaDate] 
    ,[RiskModelID] 
    ,[AxiomaID] 
    ,[Factor1] 
    FROM [PortfolioAnalytics].[Data_Axioma].[SecurityExposures] 
    Where AxiomaID = x")) 

어떻게 SQL 쿼리에 AxiomaID의의를 포함하는 모든 X 값을 붙여 넣을 수 있습니다 R.

내에서 다음 SQL 쿼리를 실행하려고?

+0

오류가 있습니까? 네 이상이라면 질문에 언급하십시오. 그게 정말 도움이 될거야. –

+0

R의 SQL 쿼리는 쿼리가 인용되므로 x를 x로 읽습니다. 42S22 207 [Microsoft] [ODBC SQL Server 드라이버] [SQL 서버] 잘못된 열 이름 'x' – user8491385

답변

2

다음 쿼리를보십시오 :

SQL6<-data.frame(sqlQuery(myConn, paste("SELECT top 10 [AxiomaDate] 
    ,[RiskModelID] 
    ,[AxiomaID] 
    ,[Factor1] 
    FROM [PortfolioAnalytics].[Data_Axioma].[SecurityExposures] 
    Where AxiomaID IN (", paste(x, collapse = ", "), ")"))) 

가 도움이 희망을!

+0

쿼리가 작동 했습니까? 왜냐하면 나는 그것을 테스트하지 않았기 때문입니다. –

+0

아닙니다. x의 AxiomaID가 ''에 있어야합니다. 따라서 첫 번째 값은 현재 '0123'이 아니라 0123이 아닌 쿼리로 이동합니다. 모든 AxiomaID에 ''을 (를) 추가하는 쉬운 방법이 있습니까? 참고 ID가 더 많아서 더 자동화하면 더 좋습니다! – user8491385

+0

확인. 내가 그때 시도해 보자. –

0

당신은

InsertListInQuery <- function(querySentence, InList) { 
    InValues <- "" 
for (i in 1:length(InList)){ 
    if (i < length(InList)) { 
    InValues <- paste(InValues,InList[[i]],",")} 
    else { 
    InValues <- paste(InValues,InList[[i]],sep = "") 
    } 

} 
    LocOpenParenthesis <- gregexpr('[(]', querySentence)[[1]][[1]] 
    LocCloseParenthesis <- gregexpr('[)]', querySentence)[[1]][[1]] 
    if (LocCloseParenthesis-LocOpenParenthesis==1) { 
    querySentence<- gsub("[(]", paste("(",InValues,sep = ""), querySentence) 
    } 
return (querySentence) 
} 

기능 InsertListInQuery 같은 기능을 시도 할 것은 WHERE clausule에()에도 제약 조건을 사용 하나에 원래 쿼리를 변경해야합니다. 어떤 함수가 쉼표로 구분 된 벡터 요소로 문자열을 일치시키고 "("문자열을 구성된 문자열로 대체하십시오.) 마지막으로 문자 변수를 반환하십시오. 따라서 제약 조건 벡터를 정의 할 수 있습니다. 그림과 같이 함수를 호출 : finalQuery의

x<-c(0123, 234, 2348, 345, 3454) 
query <- "SELECT top 10 [AxiomaDate] 
    ,[RiskModelID] 
,[AxiomaID] 
,[Factor1] 
FROM [PortfolioAnalytics].[Data_Axioma].[SecurityExposures] 
Where AxiomaID IN()" 
finalQuery <- InsertListInQuery(query, x) 

값은 다음과 같습니다.

finalQuery 
[1] "SELECT top 10 [AxiomaDate] \n ,[RiskModelID]\n,[AxiomaID]\n,[Factor1]\nFROM [PortfolioAnalytics].[Data_Axioma].[SecurityExposures]\nWhere AxiomaID IN (123 , 234 , 2348 , 345 ,3454)" 

참고 특수 문자 \ n 인 라인 반환

을 내가 도움이 될 희망

을.