我试图在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')
```
我使用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
抱歉格式化。我无法弄清楚如何让代码块中的回车工作。
我希望这有帮助。