sql - 带有 STUFF 函数的 WHERE 子句

标签 sql sql-server t-sql

我想做一个查询,我得到一些 ID,然后用逗号分隔,并将其放在我的 where 子句中。

但出现以下错误

Msg 245, Level 16, State 1, Line 10
Conversion failed when converting the nvarchar value '2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,...

我尝试了一些 Actor ,但不起作用。

示例查询:

SELECT A.ID, A.ID_PERIODO_GESTAO, A.ID_FILIAL, A.ID_RESPONSAVEL_AREA, A.ID_PARENT, A.ID_SOURCE, A.COD_AREA, A.DESC_AREA, A.ATIVO, A.USER_LOGIN_RESP, A.NOME_RESP, A.DESC_FILIAL, A.COD_AREA_SUP, A.FOTO_PATH, 
A.COLABORADOR_ID,
CASE WHEN (SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) IS NULL THEN 0 ELSE 
(SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) END AS QTD_COLABORADORES,
A.LEVEL_TREE,LEN(A.LEVEL_TREE),

STUFF(
           (SELECT ',' + CAST(VW.ID AS VARCHAR(10))
            FROM VW_AREA VW
            WHERE LEN(VW.LEVEL_TREE) > LEN(A.LEVEL_TREE) 
            AND VW.ID_PERIODO_GESTAO = 2                 
            FOR XML PATH('')), 1, 1, '')

FROM VW_AREA A
LEFT JOIN dbo.COLABORADOR_AREA ON dbo.COLABORADOR_AREA.ID_COLABORADOR = A.COLABORADOR_ID        
WHERE A.ID_FILIAL IN (9) AND A.ID_PERIODO_GESTAO = 2

UNION

SELECT A.ID, A.ID_PERIODO_GESTAO, A.ID_FILIAL, A.ID_RESPONSAVEL_AREA, A.ID_PARENT, A.ID_SOURCE, A.COD_AREA, A.DESC_AREA, A.ATIVO, A.USER_LOGIN_RESP, A.NOME_RESP, A.DESC_FILIAL, A.COD_AREA_SUP, A.FOTO_PATH, 
A.COLABORADOR_ID,
CASE WHEN (SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) IS NULL THEN 0 ELSE 
(SELECT COUNT(B.ID_COLABORADOR) FROM COLABORADOR_AREA B WHERE B.ID_AREA = A.ID GROUP BY B.ID_AREA) END AS QTD_COLABORADORES,
A.LEVEL_TREE, LEN(A.LEVEL_TREE),

    STUFF(
            (SELECT ',' + CAST(VW.ID AS VARCHAR(10))
             FROM VW_AREA VW 
             WHERE LEN(VW.LEVEL_TREE) > LEN(A.LEVEL_TREE) 
             AND VW.ID_PERIODO_GESTAO = 2           
             FOR XML PATH('')), 1, 1, '') AS 

FROM VW_AREA A
LEFT JOIN dbo.COLABORADOR_AREA ON dbo.COLABORADOR_AREA.ID_COLABORADOR = A.COLABORADOR_ID
JOIN CTE4 ON A.ID = CTE4.ID_PARENT
WHERE A.ID_PERIODO_GESTAO = 2 
AND (A.ID IN (CTE4.ID_PARENT))

结果

QTD_COLABORATOR    LEVEL_TREE     QTD_CARACTER_IN_LEVEL_TREE
1                  002            3

带有 STUFF 函数的最后一列将包含类似的数据

2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017

这是LEVEL_TREE中包含超过3个字符的所有ID

最佳答案

那永远不会起作用。您正在尝试对字符串使用 in 比较器。因此出现语法错误。有什么理由你不能这样做吗?

SELECT SUM(A.ID) 
 FROM COLABORATOR A 
 WHERE A.ID IN (SELECT VW.ID FROM VW_AREA VW)

关于sql - 带有 STUFF 函数的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706814/

相关文章:

java - 如何修复 : Embedded H2 Database "NonTransientError: Unable to read the page at position" error?

sql-server - 如何使用 sqlcmd.exe 调用带有参数的存储过程?

sql-server - 使用 VB.NET 将负整数转换为正整数

mysql - 如何在使用select查询时将mysql中的数字转换为字符

sql-server - 用于对分组值进行计数的 SQL 列

t-sql - 联合所有 - 3 个表,其中 2 个永远不会包含重复项,另一个将包含重复项

t-sql - SQL 未返回预期记录

sql - AWS DMS。复制实例中的端点连接失败(错误 : 1020912)

php - 使用php获得最低价格

mysql替换字符串+下一个字符