选择单独的列时SQL查询错误

时间:2016-06-09 07:40:44

标签: sql r shiny

我不明白我的SQL查询中出现的错误。如果我选择SQL Select * - >它工作正常,我得到了桌子, 但是,如果我选择任何列/ s,它会给我一个错误:

  

$<-.data.frame中的错误(*tmp*,&#34; PROBE&#34;,值=   结构(整数(0),。标签=字符(0),类=&#34;因子&#34;)):
  替换有0行,数据有1427

这是我的SQL代码:

if(input$filter == 1){
        sqlOutput <- reactive({
          sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.Nr =",paste0("'",d(),"'"), "And DWH.PROBE.AB BETWEEN",input$abmfrom, "AND",input$abmto,"ORDER BY Datum asc")
          print(sqlInput)
          dbGetQuery(con$cc, sqlInput)
        })
      }else{
        sqlOutput <- reactive({
          sqlInput <-  paste("select * from DWH.PROBE where DWH.PROBE.S BETWEEN",d2(), "AND",input$sgehalt2, "And DWH.PROBE.AB BETWEEN",input$abmfrom2, "AND",input$abmto2,"ORDER BY Datum asc")
          dbGetQuery(con$cc, sqlInput)
        })}

如果我只是添加到那些SQL查询

select DWH.PROBE.S, DWH.PROBE.AB.. from DWH.PROBE 

然后是上面提到的错误。

此外,我需要说明我是否会在一个简单的代码中使用此SQL查询:

rs <- dbSendQuery(con, paste("select DWH.PROBE.AB, DWH.PROBE.S from DWH.PROBE where DWH.PROBE.Nr = '50' And DWH.PROBE.AB BETWEEN 40 AND 50 ORDER BY Datum asc"))
data <- fetch(rs)

它给了我结果......

有什么想法吗?

[编辑*因为我的问题不重复]

此处发布的问题:http://stackoverflow.com/questions/32048072/how-to-pass-input-variable-to-sql-statement-in-r-shiny实际上与我的主题无关。我们可以在这篇文章中看到错误:

  

.getReactiveEnvironment()中的错误$ currentContext():操作不是   允许没有活跃的反应上下文。 (你试图做点什么   只能在反应性表达或观察者内部完成。)

我没有将输入变量传递给sql语句的问题,另外如果你可以在我的SQL中看到:查询处于被动上下文中!:

sqlOutput <- reactive({...

上述问题的解决方案是:

将SQL Query置于反应式上下文中,这不是我的情况

[编辑2] - &gt;与sqlOutput()

相关的位

这里有一些与我在Shiny App中使用的sqlOutput()相关的代码(目前这是唯一的一点,因为我遇到了SQL查询)

output$tabelle <- DT::renderDataTable({
    data <- sqlOutput()
    data$PROBE <- as.factor(as.character(data$PROBE))
    data
    }, rownames=TRUE, filter="top", class = 'cell-border stripe', 
                      options = list(pageLength = 100, lengthMenu=c(100,200,500), columnDefs = list(list(width = '200px', targets = "_all"),list(bSortable = FALSE, targets = "_all"))))

由于

1 个答案:

答案 0 :(得分:0)

错误与SQL语句无关,但请尝试将代码更改为:

sqlOutput <- reactive({
  if(input$filter == 1){
    sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.Nr =",paste0("'",d(),"'"), "And DWH.PROBE.AB BETWEEN",input$abmfrom, "AND",input$abmto,"ORDER BY Datum asc")
  } else {
    sqlInput <- paste("select * from DWH.PROBE where DWH.PROBE.S BETWEEN",d2(), "AND",input$sgehalt2, "And DWH.PROBE.AB BETWEEN",input$abmfrom2, "AND",input$abmto2,"ORDER BY Datum asc")
  }
  dbGetQuery(con$cc, sqlInput)
})