Sql 如果两个不同行中的数据相同,如何排除数据?

Sql 如果两个不同行中的数据相同,如何排除数据?,sql,sql-server,Sql,Sql Server,我正在使用SQL Server 2012,已经做了研究,但找不到我的答案,因为我不知道如何在谷歌上正确地使用它,或者在搜索栏中找到我需要的答案 我使用3列X、Y、Z处理数据。 我想写一个查询,它将告诉我: 当X中两个不同行中的数据相同时 这两行在Y中也有相同的数据 但Z列中的数据不同 我需要把它过滤掉,我完全糊涂了。 我尝试了分组依据选项,但其中一列不是可以“分组依据”的数据 我尝试了选择DISTINCT,但也没有运气。这真的很难看,但似乎有效。包括一些样本数据以验证结果。存在一个更优雅的解决方

我正在使用SQL Server 2012,已经做了研究,但找不到我的答案,因为我不知道如何在谷歌上正确地使用它,或者在搜索栏中找到我需要的答案

我使用3列X、Y、Z处理数据。 我想写一个查询,它将告诉我:

  • 当X中两个不同行中的数据相同时
  • 这两行在Y中也有相同的数据
  • 但Z列中的数据不同
  • 我需要把它过滤掉,我完全糊涂了。 我尝试了
    分组依据
    选项,但其中一列不是可以“分组依据”的数据
    我尝试了
    选择DISTINCT
    ,但也没有运气。

    这真的很难看,但似乎有效。包括一些样本数据以验证结果。存在一个更优雅的解决方案,但在短时间内,这个解决方案是可行的

    select X, Y, count(distinct Z)
    from table
    group by X, Y
    having count(distinct Z) > 1
    
    DECLARE @T TABLE (X VARCHAR(5),Y VARCHAR(5),Z VARCHAR(5),NOTES VARCHAR(50))
    INSERT INTO @T VALUES 
    ('A','01','D','DUPE X|'),('B','02','',''),('C','03','',''),('D','04','',''),
    ('E','05','',''),('F','06','',''),('G','07','',''),('H','08','',''),
    ('A','09','Z1','DUPE X| DUPE 09| UNIQ Z1' ),('A','09','D','DUPE X| DUPE 09| UNIQ D'),
    ('A','10','D','DUPE X|'),('A','09','Z2','DUPE X| DUPE 09| UNIQ Z2'),('K','13','',''),
    ('L','14','',''),('M','15','',''),('A','09','D1','DUPE X| DUPE 09 | DUPE D1'),
    ('A','09','D1','DUPE X| DUPE 09 | DUPE D1')
    
    SELECT 
        T.X, T.Y , T.Z
    FROM
        @T AS T 
        INNER JOIN
        (SELECT distinct X,Y,COUNT(*) AS XY FROM @T GROUP BY X,Y HAVING COUNT(*) > 1) AS L ON T.X = L.X AND T.Y = L.Y
        INNER JOIN
        (SELECT distinct X,Y,Z,COUNT(*) AS XYZ FROM @T GROUP BY X,Y,Z HAVING COUNT(*) = 1 ) AS U ON T.X = U.X AND T.Y = U.Y AND T.Z = U.Z