2013-07-09 1 views
2

업데이트 표 3기하 구조 데이터 타입

표 1

에서 표 2와 home_location에서 center_geom 사이의 거리를 찾는하여 표 1의 열 "거리"의 값이 다른 테이블에서 두 열 사이의 거리를 찾는 방법
obu_id  end_location  trip_id end_loc_adj distance 

1   51    1234  
2   57    1357  44 
2   63    1351 
3   21    1212  20 
3   23    4313 

표 이제

  1. 2

    id  obu_id   center_geom 
    int  int    geom 
    
    51  2    "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41" 
    52  3    "0101000020ED080000AE47E17A35F73341FE65F764723C0841" 
    57  3    "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41" 
    21  4    "0101000020ED080000B81E852BC555334186048C9EB1C21141" 
    
    표 1 참조 : 우리는 end_loc_adj에있는 값 콜 럼이있는 경우 n : 대신 end_loc_adj를 사용해야합니다. end_loc 힌트 : if-else를 사용하십시오. 표 1
  2. 열 이름 "end_loc"은 테이블의 칼럼 "ID"와 같은 값을 가지는 2

I는 다음 시도 3

hhid   obu_id   home_location 
(character  Int    geometry 
varying)  
11    1    "0101000020ED08000082E2C7A0B2413341BC5818A21F000941" 
15    2    "0101000020ED080000B81E852BC555334186048C9EB1C21141" 
17    3    "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41" 
17    4    "0101000020ED080000B81E852BC555334186048C9EB1C21141" 
22    7    "0101000020ED080000AE47E17A35F73341FE65F764723C0841" 

테이블 :

select ST_Distance_Sphere (ST_AsText(cast(v.house_location AS text)) , ST_AsText(cast(l.center AS text))) 

public.locations l, clean.vehicles v 여기서 l.obu_id = v.obu_id 및 l.obu_id = 3

하지만이 작업은 하나의 obu_id에 대해 수동으로 수행됩니다.

기능을 사용하여 한번에 완성하고 싶습니다. 어떻게하는지 알려주세요.

감사합니다.

+1

이 숙제는 어떤 종류입니까? 당신은 이미 무엇을 시도 했습니까? – bma

+0

@bma 나는 이미 시도한 것으로 나의 질문을 수정했다. 지적 해 주셔서 고마워요. – ParveenArora

답변

1
house_loc:=(select house_location from table1 where obu_id=b.obu_id); 

house_loc_geom := ST_Transform(house_loc,4269); 
IF b.end_location_adj IS null THEN 
    end_loc:= (select center from table2 where id=b.end_location and obu_id= b.obu_id); 
else 
    end_loc:= (select center from tabl2 where id = b.end_location_adj and obu_id = b.obu_id); 
end if; 

center_geom:=ST_Transform(end_loc,4269); 


UPDATE table 1 set dist_from_home_in_meter=distance 
where obu_id=b.obu_id and trip_id=b.trip_id and end_location=b.end_location; 

이 답변에 가까울수록 약간의 수정이 필요합니다.