从行到列添加值(传输成本)

时间:2015-12-11 08:51:23

标签: sql postgresql

我有以下问题(见下图)。

我有一张桌子,里面有村庄之间的交通费用。 来源是交通开始的村庄。目标是运输结束的村庄。

从1号村到2号村的运输费用与从2号村到1号村的运输费用不同。

现在我确实有相反的成本数字,但在另一行(见图)。

现在我想将村庄2到1的运输成本添加到reverse costs栏中。

由于我有大约7000个关系,因此无法手动完成。请通过SQL查询建议如何操作。

Transport costs

2 个答案:

答案 0 :(得分:1)

您可以在自加入中使用更新查询,如下所示

update t
set revcost= t2.cost 
from t t1 left join t t2
on t1.src=t2.tgt and t1.tgt=t2.src
where t.src=t1.src and t.tgt=t1.tgt;

select * from t order by id;

请参阅此处的SQL小提琴http://sqlfiddle.com/#!15/ecd54/12

答案 1 :(得分:-1)

如果我理解你的问题,我认为这会做你想要的:

update village v1
set
  reverse_cost = v2.cost
from
  village v2
where
  v1.source = v2.target and
  v2.source = v1.target and
 (v1.reverse_cost is null or v1.reverse_cost != v2.cost)