首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环只检查向量中的最后一个值,以便用R检查Server中的重复值?

for循环只检查向量中的最后一个值,以便用R检查Server中的重复值?
EN

Stack Overflow用户
提问于 2021-12-30 03:24:43
回答 1查看 41关注 0票数 1
代码语言:javascript
复制
library(odbc)
library(DBI)
library(pool)
myDatabase <- 'MyDB'
myDriver <- 'SQL Server'
myServer <- 'localhost\\SQLEXPRESS'

con <- pool::dbPool(odbc::odbc(), Driver = myDriver,
                    Server = myServer,
                    Database = myDatabase,
                    Trusted_Connection = 'True')

Caddy_id <- c("C1","C2","C3","C4","C5","C6","C7","C8","C9","C10")

for(i in 1:length(Caddy_id)){
  
check_duplicate <- dbGetQuery(con,paste0("DECLARE @container AS INT = 0
                                            IF EXISTS(SELECT 1 FROM dbo.P1000_Packing WITH(NOLOCK)
                                              WHERE Caddy_1 = '",Caddy_id[i],"' OR
                                                    Caddy_2 = '",Caddy_id[i],"' OR
                                                    Caddy_3 = '",Caddy_id[i],"' OR
                                                    Caddy_4 = '",Caddy_id[i],"' OR
                                                    Caddy_5 = '",Caddy_id[i],"' OR
                                                    Caddy_6 = '",Caddy_id[i],"' OR
                                                    Caddy_7 = '",Caddy_id[i],"' OR
                                                    Caddy_8 = '",Caddy_id[i],"' OR
                                                    Caddy_9 = '",Caddy_id[i],"' OR
                                                    Caddy_10 = '",Caddy_id[i],"')
                                              BEGIN
                                                   SET @container = 1
                                              END
                                            SELECT @container;"))

}
check_duplicate

我想用R检查Server中重复项的所有值,但只能检查向量Caddy_id中的最后一个值。

为什么只有值10返回1而另一个值即使存在于sql表中也会返回?

此表返回1

但是这个表返回0。

如果我更改向量Caddy_id <- c("C0","C1","C2","C3","C4","C5","C6","C7","C8","C9"),它也返回1

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 03:49:30

目前,在每次将@container重置为零的迭代中,查询都会自行运行。因此,只保留最后一次运行计数,每次替换check_duplicate

但是,考虑通过为每个caddy id构建一个聚合计数向量列表来计算R中的重复数。确保还使用包含的参数安全地运行查询。

代码语言:javascript
复制
Caddy_id <- c("C1","C2","C3","C4","C5","C6","C7","C8","C9","C10")

sql = "SELECT COUNT(*) AS [count]
       FROM dbo.P1000_Packing
       WHERE Caddy_1  = ?cad_id OR
             Caddy_2  = ?cad_id OR
             Caddy_3  = ?cad_id OR
             Caddy_4  = ?cad_id OR
             Caddy_5  = ?cad_id OR
             Caddy_6  = ?cad_id OR
             Caddy_7  = ?cad_id OR
             Caddy_8  = ?cad_id OR
             Caddy_9  = ?cad_id OR
             Caddy_10 = ?cad_id"

check_duplicates <- sapply(
    Caddy_id, 
    function(i) {
        qry <- sqlInterpolate(con, sql, ?cad_id = i)
        dbGetQuery(con, qry)$count
    }
)

total_duplicates <- sum(check_duplicates, na.rm = TRUE)

另一种SQL查询:

代码语言:javascript
复制
SELECT COUNT(*) AS [count]
FROM dbo.P1000_Packing
WHERE ?cad_id IN (
     Caddy_1, Caddy_2, Caddy_3, Caddy_4, Caddy_5,
     Caddy_6, Caddy_7, Caddy_8, Caddy_9, Caddy_10
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70527140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档