首页 > 解决方案 > T-SQL:我需要获取字符串列中的缺失值

问题描述

在我的查询中,我需要在字符串中查找缺失的值。我的查询返回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 

如果 c.count>0(1,2 等),此查询返回 top1 代码格栅和缺失值的数量 .now。我需要知道错过了哪个值(代码)。像 1,2,4,7 这样的代码和像 147582, 26854789, 2579365, 478529 这样的 code_grille_talend

标签: sql-servertsql

解决方案


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

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

推荐阅读