no tot place1 place2
1 1 colombo negombo
1 2 negombo kandy
1 3 kandy colombo
2 1 colombo kandy
2 2 kandy jafna
2 3 jafna negombo
3 1 jafna kaduwela
3 2 kaduwela jafna
4 1 trico colombo
在此,我想让no
和place1
和place2
相同。
示例:
no
1的总数为3 tot
,并且其place1
和place2
相等,因为它是'Colombo'
(比较列和行)。
但是no
2的place1
和place2
并不相同。
如何通过查询检索类似的数据?
答案 0 :(得分:1)
如果我的理解正确,您希望place1
中的列表与place2
中的no
中的列表匹配。
如果是这样,您可以使用listagg()
:
select no, listagg(place1, ',') within group (order by place1) as places
from t
group by no
having listagg(place1, ',') within group (order by place1) = listagg(place2, ',') within group (order by place2);
答案 1 :(得分:0)
您可以使用ROW_NUMBER()
来确定该旅程的终点站位置(或它们的位置)。从开始到目的地的顺序,反之亦然。终端的ROW_NUMBER()
为1。对第一顺序的终端使用PLACE1
,对于第二顺序的终端使用PLACE2
。然后加入结果并比较端子。如果它们相等,则可以往返,并且可以返回各自的NO
。
SELECT X.NO
FROM (SELECT NO,
PLACE1 PLACE,
ROW_NUMBER() OVER (PARTITION BY NO
ORDER BY TOTN ASC) RN
FROM ELBAT) X
INNER JOIN (SELECT NO,
PLACE2 PLACE,
ROW_NUMBER() OVER (PARTITION BY NO
ORDER BY TOTN DESC) RN
FROM ELBAT) Y
ON Y.NO = X.NO
WHERE X.RN = 1
AND Y.RN = 1
AND X.PLACE = Y.PLACE;
答案 2 :(得分:0)
SELECT A.*
FROM A A
WHERE NOT EXISTS (SELECT 1
FROM B B
WHERE A.A = B.A)