2017-09-24 7 views
1

私は以下のAxiomaIDを含むデータフレームを持っています。 R.Rを介してSQLクエリに値を貼り付け

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

し、次のSQLクエリを実行しようとして

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

どのように私は、SQLクエリにAxiomaIDさんを含むすべてのxの値を貼り付けることができますか?

+0

何か問題があったのですか?肯定の場合は質問に記入してください。それは本当に役に立つでしょう。 –

+0

RのSQLクエリは、クエリが引用されているためxをxと解釈します。 42S22 207 [Microsoft] [ODBC SQL Server Driver] [SQL Server]無効な列名 '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に()における制約を使用するものにあなたの元のクエリを変更する必要があります。文字列をコンマで区切ってベクトル要素に適合させ、 "("文字列を構成した文字列に置き換えてください)最後に、文字変数を返します したがって、要素のリスト、クエリおよび示すように関数を呼び出す:

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の値は次のとおりです。特殊な文字\ nの

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)" 

注改行

私はそれが役立つことを願ってい

関連する問題