使用R环境将sql查询的输出放入另一个查询中

时间:2018-02-13 09:34:34

标签: sql r odbc

我想知道应该选择哪种方法来执行标题的操作。我使用ODBC连接,我从第一个SQL查询得到的是一列40-50行。我想要的是将此输出作为 中的值进行搜索。

我应该如何对待这个?像数组或分离变量?我仍然不知道R井,所以只需要知道在哪里搜索。

此致

------下面有更多解释----

我列出了40-50个数字,每个数字10个数字,按列组织。

我正在尝试这样做:

list <- c(my_input)
sql_in <- paste0(list, collapse="")
在此操作之后

和字符组织如下:

'c(1234567890, , 1234567890, 1234567890)'

并且几乎所有看起来都很好并且适合我的查询,除了开头的额外c字符和缺少撇号。我尝试使用gsub函数但是没有按照我想要的方式工作。

4 个答案:

答案 0 :(得分:2)

您可能使用子查询在一次SQL调用中执行此操作。在下面的调用中注意

的结果
C

传递给主查询的C++子句。这是完全有效的,它将允许您的查询完全在SQL中执行,而无需在R中执行任何中间步骤。

(为了简化说明,我使用std::stable_sort(),但这应该适用于任何ODBC连接)

SELECT n_gear
FROM Gear
WHERE n_gear IN (3,4)

答案 1 :(得分:1)

尝试这样的事情:

list<-c("try","this") #The output from your first query

sql_in<-paste0(list, collapse="','")

输出

paste("select * from table where table.var in ",paste("('",sql_in,"')",sep=''))
[1] "select * from table where table.var in  ('try','this')"

如果yuo有空格作为字符串的第一个或最后一个元素,您可以使用以下代码:

`list<-c(" first element is a space","try","this","last element is a space ")` #The output from your first query

在第一个或最后一个字符处查找空格

first_space<-substr(list, start = 1, stop = 1)==" "
last_space<-substr(list, start = nchar(list), stop = nchar(list))==" "

删除空格

list[first_space]<-substr(list[first_space], start = 2, stop = nchar(list[first_space]))
list[last_space]<-substr(list[last_space], start = 1, stop = nchar(list[last_space])-1)

sql_in<-paste0(list, collapse="','")

您的输出

paste0("select * from table where table.var in ",paste("('",sql_in,"')",sep=''))
"select * from table where table.var in ('first element is a space','try','this','last element is a space')"

答案 2 :(得分:0)

我认为你期待一些如下所示的代码,

data <- dbGetQuery(con, "select column from yourfirsttable")

list <- paste(data$column, collapse="','")

result <- dbGetQuery(con, statement = sprintf("select * from yourresulttable where inv in ('%s')",list))

答案 3 :(得分:0)

目前还不完全清楚你想要在这里实现的目标。例如,一个用例只意味着您可以通过连接完成所有操作。但我有一些情况,我不知道测试的值,而不做一些计算。然后我做了一个单独的查询,创建了一个查询字符串,因此:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

public class CreateExcelXSSFProtectedSheet {

 public static void main(String[] args) throws Exception {

  Workbook workbook = new XSSFWorkbook();

  CreationHelper createHelper = workbook.getCreationHelper();

  CellStyle unlockedNumericStyle = workbook.createCellStyle();
  unlockedNumericStyle.setDataFormat(createHelper.createDataFormat().getFormat("$#,##0.00_);[Red]($#,##0.00)"));
  unlockedNumericStyle.setLocked(false);

  CellStyle dateStyle = workbook.createCellStyle();
  dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));

  Sheet sheet = workbook.createSheet();

  Row row = sheet.createRow(0);
  Cell cell = row.createCell(1);
  cell.setCellValue("some data");

  row = sheet.createRow(1);
  cell = row.createCell(1);
  cell.setCellValue(-123456789.0123456);
  cell.setCellStyle(unlockedNumericStyle);

  row = sheet.createRow(2);
  cell = row.createCell(1);
  cell.setCellValue(new java.util.Date());
  cell.setCellStyle(dateStyle);

  ((XSSFSheet)sheet).lockFormatColumns(false);

  sheet.protectSheet("passwordExcel"); 

  sheet.autoSizeColumn(1);

  workbook.write(new FileOutputStream("CreateExcelXSSFProtectedSheet.xlsx"));
  workbook.close();

 }

}