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