T-SQL:我需要提取字符串列中未命中的值

wqsoz72f  于 2022-10-03  发布在  其他
关注(0)|答案(1)|浏览(152)

在我的查询中,我需要在字符串中查找遗漏的值。我的查询返回code_grille_talend和遗漏的值的数量。现在,我需要获取丢失的值以完成我的工作

我在SQL Server中尝试了一个查询,该查询返回code_grille_talend,其中包括所有值和遗漏的值的数量

select top 1 
    (G.[code_grille_talend]),
    count(C.code) as counter 
from 
    [dbo].[code] G
left join    
    [dbo].[codeT] C on G.code_grille_talend not like '%' + LTRIM(RTRIM(C.code)) + '%'
group by 
    G.code_grille_talend
having 
    len(g.code_grille_talend) + count(C.code) <= 20 or count(C.code) = 0
order by 
    len(g.code_grille_talend) desc

此查询返回TOP1代码格栅和未命中的值的数量。现在,如果c.count>0(1,2,等等)。我需要知道遗漏了哪个值(代码)。

代码类似于1,2,4,7
和代码格栅像147582,26854789,2579365,478529

wlzqhblo

wlzqhblo1#

如果您有一个包含必需代码的表和一个包含实际代码的表,您可以使用下面的查询来查看缺少哪些必需代码。

CREATE TABLE #requiredValues ([Code] VARCHAR(MAX))
INSERT INTO
    #requiredValues
VALUES
    ('1'),
    ('2')

CREATE TABLE #values ([Code] VARCHAR(MAX))
INSERT INTO
    #values
VALUES
    ('12'),
    ('2'),
    ('3')

SELECT
    #values.[Code], STRING_AGG(#requiredValues.[Code], ', ')
FROM
    #requiredValues
RIGHT JOIN
    #values ON #values.[Code] NOT LIKE '%' + #requiredValues.[Code] + '%'
GROUP BY
    #values.[Code]

-- Without STRING_AGG: for SQL versions pre-2017.
SELECT
    #values.[Code]
    ,STUFF((
        SELECT
            ', ' + #requiredValues.[Code]
        FROM
            #requiredValues
        WHERE
            #values.[Code] NOT LIKE '%' + #requiredValues.[Code] + '%'
        FOR XML PATH ('')),1,2,'')
FROM
    #values
GROUP BY
    #values.[Code]

DROP TABLE #requiredValues
DROP TABLE #values

相关问题