rstudio notebook的sql块中的sql临时表?

问题描述 投票:1回答:2

我试图在rstudio中的sql代码中使用临时表。

一个例子:当我选择一个表并将其返回到r对象时,事情似乎正在起作用:

```{sql  ,  output.var="x",  connection='db'    }
  SELECT count(*) n
    FROM origindb
```

当我尝试使用临时表时,似乎命令正在运行,但返回一个空的r data.frame

```{sql  ,  output.var="x",  connection='db'    }
  SELECT count(*) n
    INTO #whatever
    FROM origindb

  SELECT *
   FROM #whatever
```

我的印象是Rstudio笔记本的sql块只是设置为一个查询。所以我的临时解决方案是在数据库中的存储过程中创建表。然后我可以用简单的东西得到我想要的结果。我宁愿在sql代码块中有更多的灵活性。

我的数据库连接看起来像这样:

```{r,echo=F}
db <- DBI::dbConnect(odbc::odbc(),
                      driver = "SQL Server",
                      server = 'sql',
                      database = 'databasename')
```
sql r rstudio
2个回答
1
投票

this question一样,如果你放,它会起作用

set nocount on

在你的大块顶部。当温度表的handed back the rowcount时,R似乎感到困惑。


1
投票

我使用CTE完成了我的目标。只要您按照将要使用它们的顺序定义CTE,它就可以工作。就像使用临时表一样,有一个很大的例外。查询完成后,CTE将消失,临时表存在,直到spid为kill(通常通过断开连接)。

WITH CTE_WHATEVER AS (
                       SELECT COUNT(*) n 
                       FROM origindb
                      ) 
      SELECT * 
      FROM CTE_WHATEVER

您还可以为多个临时表示例执行此操作

WITH CTE1 AS (
              SELECT 
                  STATE
                 ,COUNTY
                 ,COUNT(*) n 
              FROM origindb 
              GROUP BY 
                 STATE
                 ,COUNTY
              ),
     CTE2 AS (
              SELECT 
                 STATE
                 ,AVG(n)
                 ,COUNTY_AVG
              FROM CTE1 
              GROUP BY 
                 STATE
              )
SELECT * 
FROM CTE2 
WHERE COUNTY_AVG > 1000000

抱歉格式化。我无法弄清楚如何让代码块中的回车工作。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.