Sql 在视图中查找公共值
使用oracle数据库12 我有这些数据Sql 在视图中查找公共值,sql,oracle,Sql,Oracle,使用oracle数据库12 我有这些数据 X1 X2 X3 42858 RRR08401000A 1 42858 RRR06113000A 1 42858 RRR05529000A 1 42858 RRR05529000B 1 42858 RRR49110RRRF 1 42858 34100000000A 1 42974 XYZ39916000A 1 42974 XYZ00949000B
X1 X2 X3
42858 RRR08401000A 1
42858 RRR06113000A 1
42858 RRR05529000A 1
42858 RRR05529000B 1
42858 RRR49110RRRF 1
42858 34100000000A 1
42974 XYZ39916000A 1
42974 XYZ00949000B 2
42974 XYZ04888000A 1
42974 XYZ39915000B 1
42974 XYZ38535000A 1
42974 XYZ42350000A 1
42974 XYZ39746X0AA 1
42974 XYZ39743X0AA 1
42974 XYZ39923000A 1
42974 XYZ39745X0AA 1
42974 XYZ39744000A 1
42974 XYZ03058X0AB 1
42974 XYZ39759000A 1
42974 XYZ39760000B 1
42974 XYZ39762000A 1
42974 XYZ39748000A 1
42974 XYZ39749000B 1
42974 XYZ39747000A 1
42974 XYZ39742X0AA 1
42974 XYZ47965000B 1
42974 IUYI0902000E 1
42974 IUYI0897000F 1
42974 IUYI0909000F 1
42975 XYZ39916000A 1
42975 XYZ00949000B 2
42975 XYZ04888000A 1
42975 XYZ39915000B 1
42975 XYZ38535000A 1
42975 XYZ42350000A 1
42975 XYZ39746X0AA 1
42975 XYZ39743X0AA 1
42975 XYZ39923000A 1
42975 XYZ39745X0AA 1
42975 XYZ39744000A 1
42975 XYZ03058X0AB 1
42975 XYZ39759000A 1
42975 XYZ39760000B 1
42975 XYZ39762000A 1
42975 XYZ39748000A 1
42975 XYZ39749000B 1
42975 XYZ39747000A 1
42975 XYZ39742X0AA 1
42975 XYZ47965000B 1
42975 IUYI0902000E 1
42975 IUYI0897000F 1
42975 IUYI0909000F 1
我想要的是在X2中找到公共值,然后返回X1
在本例中,我想得到42974和42975,因为它们共享相同的X2
我使用这个查询,但它不返回任何内容
SELECT
TT.X1
FROM TEST12 TT
group by TT.WORK_ORDER
having count(distinct TT.X2) = (select count (distinct tt2.X2) from TEST12 tt2)
但是如果我从数据中删除42858,它将返回42974和42975
请告知
谢谢,
旅行者
cREATE TABLE TEST12 (
X1 NUMBER(8),
X2 VARCHAR2(30),
x3 NUMBER(8)
);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42858,'RRR08401000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42858,'RRR06113000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42858,'RRR05529000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42858,'RRR05529000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42858,'RRR49110RRRF',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42858,'34100000000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39916000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ00949000B',2);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ04888000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39915000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ38535000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ42350000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39746X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39743X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39923000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39745X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39744000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ03058X0AB',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39759000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39760000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39762000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39748000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39749000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39747000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ39742X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'XYZ47965000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'IUYI0902000E',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'IUYI0897000F',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42974,'IUYI0909000F',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39916000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ00949000B',2);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ04888000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39915000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ38535000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ42350000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39746X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39743X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39923000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39745X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39744000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ03058X0AB',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39759000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39760000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39762000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39748000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39749000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39747000A',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ39742X0AA',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'XYZ47965000B',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'IUYI0902000E',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'IUYI0897000F',1);
INSERT INTO TEST12 (X1, X2, X3) VALUES (42975,'IUYI0909000F',1);
尝试加入:
SELECT DISTINCT T1.X1
FROM TEST12 T1
JOIN TEST12 T2 ON T1.X2 = T2.X2
AND T1.X1 != T2.X2
如果有三行或更多行共享一个X2
值,则需要使用DISTINCT
。如果最多只有两行共享X2
值,则可以省略DISTINCT
关键字。- 我知道您希望X1值共享其所有X2值
- 此解决方案适用于Oracle 11g R2
select count (*) as x2_within_group
,x2_elements
,listagg (x1,',') within group (order by x1) as x1_list
from (select X1
,listagg (x2,',') within group (order by x2) as x2_list
,count (*) as x2_elements
from TEST12
group by X1
)
group by x2_list
,x2_elements
;
errorORA-01722:无效号码01722。00000-“无效数字”*原因:指定的数字无效*操作:指定一个有效的数字。谢谢Dudu,我们还可以添加X2的总计数相似性吗?@TRIEZEREN,你的意思是,每个X1有多少个X2值?我们还可以使用附加分组rankThanks Dudu使其像pivot一样。它起作用了,我正在用pivot的相同数据创建另一个问题output@TRIEZEREN太好了(附言,如果你喜欢这个答案,你可能想投它一票)
X2_WITHIN_GROUP X2_ELEMENTS X1_LIST
---------------- ---------- ---------
2 23 42974,42975
1 6 42858
select dense_rank () over (order by listagg (x2,',') within group (order by x2)) as group_id
,X1
,count (*) as x2_elements
from TEST12
group by X1
;
GROUP_ID X1 X2_ELEMENTS
---------- ---------- ------------
1 42858 6
2 42975 23
2 42974 23