0

我一直在努力寻找这个问题的答案。

列出所有具有相同面积的位置对。结果应该列出(location name 1, location name 2, location area)wherelocation name 1location name 2have same location area。这对应该在输出中只出现一次。

所以表格可以如下所示:

(Loc_id, Loc_name, Loc_area)
(1, ABC, 60)
(2, ZXY, 50)
(3, DEF, 60)
(4, YUM, 60)
(5, ZUM, 50)

对:(ABC,DEF,60), (ZXY,ZUM,50), (ABC,YUM,60), (DEF,ZUM,60), 等等。

更新:

使用 Pratik 的解决方案,我得到了一张包含名字、名字和位置区域的表格。但是,它在此表中没有给出任何价值。

如果我这样做怎么办?

select t_1.Loc_name name1, t_2.loc_name name2, t_1.loc_area
from Location t_1, Location t_2
where t_1.loc_area = t_2.loc_area and t_1.loc_name<>t_2.loc_name
Order by t_1.Loc_name

我得到了所有可能组合的列表(类似于下面 Rebika 的解决方案)。但是现在我如何从这个列表中删除重复项?

我不想

name1      name2     loc_area
ABC         DEF        60
DEF         ABC        60

我想

name1      name2     loc_area
ABC        DEF         60
ABC        YUM         60
DEF        YUM         60
.
.
.

谢谢。

4

4 回答 4

1

试试这个,

SELECT a.loc_name, b.loc_name, a.loc_area
  FROM LOCATION a, LOCATION b
 WHERE a.loc_area = b.loc_area
   AND a.loc_name != b.loc_name
   AND a.loc_id < b.loc_id;
  • 第一个条件确保loc_area连接相同的记录。
  • 第二个条件确保loc_name不与自身连接。
  • 第三个条件确保只loc_name返回一个组合。
于 2013-05-21T04:11:08.150 回答
0

由于您没有指定您的 oracle 版本,因此如果您使用的是 Oracle 11g,则可以使用它:

select loc_area, listagg (loc_name, ',') WITHIN GROUP 
(ORDER BY loc_name) Locations
FROM LOCATION
GROUP BY LOC_AREA;

如果您使用的是 Oracle 9,请尝试使用 xmlagg:

select loc_area, rtrim (xmlagg (xmlelement (e, loc_name || ',')).extract ('//text()'), ',') Locations
from LOCATION
group by LOC_AREA ;

来源:http ://www.dba-oracle.com/t_converting_rows_columns.htm

于 2013-05-19T22:44:19.337 回答
0

我认为以下查询将解决您的问题-

select t_1.Loc_name name1, t_2.loc_name name2, t_1.loc_area
from Location t_1, Location t_2
where t_1.loc_area = t_2.loc_area
and t_1.loc_area<t_2.loc_area
Order by t_1.Loc_name
于 2013-05-19T22:51:23.023 回答
0

试试这个-:

SELECT a.Loc_name locname1, b.Loc_name locname2, a.Loc_area
FROM Location a
JOIN Location b
ON 1=1
WHERE a.area =b.area and a.Loc_name <>b.Loc_name

我已经避免了那些与自我配对的位置名称,例如(ABC,ABC)。如果你也想在 where 子句中删除条件a.loc_name <>b.loc_name 。

我希望这就是你要找的。

于 2013-05-20T08:38:27.527 回答