2014-09-17 8 views
0

여기 프로젝트 테이블이 있습니다데이터에 #이 들어 있고 그 테이블의 다른 테이블에 데이터가 삽입되면 행의 데이터를 분리하는 방법은 무엇입니까?

 
id sector       project 
1 Agriculture#Business#Private Test 

을하고 난 번호로 부문을 분리하고 여기에 또 다른 project_sector 테이블에 삽입 할 :

 
id  project_id  sector 
1   1   Agriculture 
2   1   Business 
3   1   Private 

당신이 나에게이 작업을 수행하는 쿼리를 안내 할 수 ??

답변

0

당신은이 쿼리의 출력은 물론 다른 테이블에 가입 할 수 string_to_arrayunnest

select id, 
     unnest(string_to_array(sector, '#')) as sector, 
     project 
from project; 

의 조합을 사용할 수 있습니다. 가독성을 위해 이것을 공통 테이블 식에 넣는 것을 선호합니다. http://sqlfiddle.com/#!15/1fc14/3

+0

괜찮 았지만 작동하지 않는 섹터를 사용하여 다른 테이블에 가입 하시겠습니까 ?? – Ash

+0

나는 같은 쿼리에서 불충분 한 후 해당 섹터를 사용하여 섹터 테이블에 프로젝트 테이블에 가입하고 싶습니다. 우리가 할 수있는 그것 ?? – Ash

+0

@ user3789087 : 확실히 편집하십시오. –

1

당신은 ROW_NUMBER()

를 사용할 수 있습니다

with normalized_projects as (
    select id, 
      unnest(string_to_array(sector, '#')) as sector, 
      project 
    from project 
) 
select p.id as project_Id, 
     row_number() over (partition by p.id order by sector) as new_sector_id, 
     p.sector, 
     p.project, s.sector_id 
from normalized_projects p 
    join sector s on s.sector_name = p.sector; 

당신은 또한 당신이

SQLFiddle 예는 모든 장소에 걸쳐 해당 쿼리를 반복하지 않아도 그 정규화 된 구조에게 볼을 고려하는 것이 좋습니다

select ROW_NUMBER() OVER (PARTITION BY project_id ORDER BY sector) as id, 
     project_id, 
     sector 
from (select id as project_id, 
       unnest(string_to_array(sector, '#')) as sector 
     from project) as t;