2013-01-18 3 views
3

PostgreSQL 8.4에서 ID가 3 인 테이블에서 뷰를 생성하려고합니다. 그래서 난 내보기에서이 구조를 갖고 싶어 :뷰에 ROW_NUMBER()를 추가하는 방법은 무엇입니까?

num serial, 
name_dispatcher character varying(250) 
the_geom geometry 

나는 테이블에서 name_dispatcherthe_geom를 선택할 수 있습니다

CREATE VIEW lineView 
     AS SELECT 'name' AS name_dispatcher, the_geom 
     FROM line1 
     UNION 
     SELECT 'name' AS name_dispatcher, the_geom 
     FROM line2 
     UNION 
     SELECT 'name' AS name_dispatcher, the_geom 
     FROM line3 

어떻게보기에 num 열을 만들?

UPDATE가 나는 해결책을 발견 :

ROW_NUMBER() OVER(ORDER BY lineView.voltage) 

을하지만 ALTER VIEW에서 사용하는 방법을 모르겠어요. 어떻게 거기에 넣을 수 있습니까?

+2

사이드 노트 : 'UNION'은 중복을 제거하기 때문에 값 비싼 작업이 될 수 있습니다. 최종 결과에 중복이 없다는 것을 알고 있거나 존재하는 복제본이 있으면 괜찮습니다. 'UNION ALL'으로 전환하면 도움이 될 수 있습니다. –

답변

6

ALTER VIEW을 사용하여 열을 삭제하거나 추가 할 수 없습니다. 견적 내역 the manual on ALTER VIEW :

ALTER VIEW은보기의 다양한 보조 속성을 변경합니다. (당신이 뷰의 정의 쿼리를 수정할 경우, CREATE OR REPLACE VIEW를 사용합니다.)

그러나 간단한 CREATE OR REPLACE VIEW를 잘라하지 않습니다. Another quote from the manual :

DROP VIEW lineview; 

CREATE VIEW lineview AS 
SELECT *, row_number() OVER(ORDER BY ???) AS num 
FROM (
    SELECT 'name' AS name_dispatcher, the_geom 
    FROM line1 

    UNION 
    SELECT 'name' AS name_dispatcher, the_geom 
    FROM line2 

    UNION 
    SELECT 'name' AS name_dispatcher, the_geom 
    FROM line3 
    ) x 

내가 하위 쿼리 때문에를 사용

새로운 쿼리가 하여 기존 뷰 쿼리

그래서

DROPCREATE 뷰를 생성 된 같은 열을 생성해야합니다 모든 행에 row_number()을 추가한다고 가정합니다. 그 점에서 당신의 질문은 모호합니다.
고유 한 ID를 특별한 순서없이 사용하려면 row_number() OVER()을 사용하십시오.

+0

감사! 그러나'x'는 무엇입니까? –

+0

@KliverMax : 이는 'AS x'의 약자로, 하위 선택을위한 테이블 별칭입니다. SQL에는 하나가 필요합니다. –

관련 문제