当且仅当元组的其余部分都匹配时,返回元组



我的目标是输出一个包含对象的表,这些对象的Data1和Data2对必须都相等。例如,在下表中,A在2=2和1=1的两个元组中,并且对于A不存在Data1<gt;数据2.B具有4=4,然而3<gt;1,因此不会输出。我不能简单地使用WHERE Data1=Data2,否则|B|4|4|也将包含在内。

SELECT * FROM Table
24
对象数据1数据2
A2
A11
B31
B4
C56
C78

试试这个:

with u as 
(select Obj, 
Data1, 
Data2,
sum(case when Data1 <> Data2 then 1 else 0 end) over(partition by Obj) as r
from table_name)
select Obj, Data1, Data2 from u
where r = 0

Fiddle

基本上使用sum窗口函数和case表达式来获得r每个ObjData1 <> Data2次数,然后只选择具有r = 0的行

WITH CTE(Obj,   Data1 , Data2) AS
(
SELECT 'A' ,  2 , 2 UNION ALL
SELECT 'A' ,  1 , 1 UNION ALL
SELECT 'B' ,  4 , 4 UNION ALL
SELECT 'C' ,  5 , 6 UNION ALL
SELECT 'C' ,  7 , 8 UNION ALL
SELECT 'B' ,    3,  1 UNION ALL
SELECT 'C' ,  5 , 6 UNION ALL
SELECT 'C' ,  7 , 8
)
SELECT C.Obj,C.Data1,C.Data2
FROM CTE AS C
WHERE NOT EXISTS
(
SELECT 1 FROM CTE AS X
WHERE C.Obj=X.Obj AND X.Data1<>X.Data2
)

最新更新