我有一个问题我想要比较B列中存在的A列值,无论它们在B列中的顺序如何
例如:
Column A 177 Column B 177
Column A 2 : 3 : 1 : 18 : 123 : 170 Column B 18 : 123 : 3 : 2 : 3 : 1 : 1
Column A 2 : 3 : 177 : 123 Column B 3 : 123 : 2 : 177
Column A 2 : 3 : 1 : 123 : 177 Column B 1 : 123 : 2 : 3 : 3 : 1
Column A 172 Column B 1
Column A 2 : 3 : 1 : 18 : 123 : 177 Column B 3 : 1 : 18 : 123 : 3 : 2 : 1
我们可以看到第一个记录OK 第二条记录,NO,因为值170不存在 第三次注册,好的,虽然订单与A栏不一样,但有值
第四条记录,没有 第五项记录,没有 第六个寄存器号非常感谢帮助朋友们!
我正在使用Oragle 11g。
答案 0 :(得分:0)
您正在尝试在SQL中实现字符串到表格功能。
正如here所述,下面的代码段将是一个良好的开端。您可以通过将分隔符更改为:
而不是,
来扩展以下内容,然后包含DENSE RANK
以比较组中的列值。一旦将字符串分成多行,就可以轻松比较。因此,与C1 = C2
之类的直接检查不同,您可以包含DENSE RANK
值来确定这一点。
我无法访问任何Oracle实例进行小提琴或测试,甚至sqlfiddle.com现在已经破坏了很长时间。但是这个指针应该以某种方式帮助你。我所包含的链接包含此功能的多种选择。
SQL> SELECT str
2 , REGEXP_SUBSTR(str, '[^,]+', 1, LEVEL) AS single_element
3 , LEVEL AS element_no
4 FROM (
5 SELECT ROWNUM AS id
6 , str
7 FROM t
8 )
9 CONNECT BY INSTR(str, ',', 1, LEVEL-1) > 0
10 AND id = PRIOR id
11 AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL;
STR SINGLE_ELEMENT ELEMENT_NO
------------------------------ ------------------------------ ----------
X,Y,Z X 1
X,Y,Z Y 2
X,Y,Z Z 3
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG XXX 1
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG Y 2
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG ZZ 3
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG AAAAA 4
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG B 5
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG CCC 6
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG D 7
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG E 8
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG F 9
XXX,Y,ZZ,AAAAA,B,CCC,D,E,F,GGG GGG 10