Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在视图中查找公共值_Sql_Oracle - Fatal编程技术网

Sql 在视图中查找公共值

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

使用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    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
这里有一些选择。 X2元素的数量有限制,因为它们被连接到单个字符串

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