2011-09-27 6 views
-1

postgresql 8.1을 사용하고 있으며 해당 버전에서 새 기능을 사용하지 않습니다. 이 경우 무엇을 할 수있게 도와 주시겠습니까?포스트 그레스에서 콜론으로 구분 된 값을 표시

unit_office 테이블을 다음과 같이

내 첫 번째 테이블은 다음과 같습니다

Mandal_ids  Name 
82:05:   test sample 
08:20:16:  test sample 

만달 마스터 테이블 : 지금은 선택 말할 때

mandal_id mandal_name 
08   Etcherla 
16   Hiramandalam 
20   Gara 

*이 표시되어야합니다 unit_office에서 :

Mandal    Name of office 
Hiramandalam, Gara test sample 

즉 ID 대신 해당 이름 (쉼표로 구분)을 쉼표로 구분합니다.

대소 문자 구분 기호가있는 포스트그레스에 열이 있습니다. 다음은 내 테이블에서 한 레코드입니다.

mandalid     
18:82:14:11:08:05:20:16:83:37:23:36:15:06:38:33:26:30:22:04:03: 

는 I *이 테이블은 열 mandalid 쉼표로 ​​구분 번호 대신에 mandals의 이름을 표시한다 선택 말할 때.

이제 마스터 테이블의 ID에 해당하는 이름이 있습니다.

첫 번째 테이블의 선택 쿼리에서 ID의 이름을 표시하려고합니다. like

나의 첫 번째 테이블 이름은 unit office입니다. 내가 unit office에서 select *라고 말할 때, 나는 id 대신에 이름을 원한다.

+0

예제 데이터에 쉼표 (',')가 없습니다. 콜론 (':')을 의미합니까? 그리고 관련된 두 테이블의 정의를 보여주십시오! –

+0

내 첫 번째 테이블은 unit_office이며 다음과 같이 unit_office (mandal_id, office_name) 테이블을 만들고 mandal_id 열은 다음과 같습니다. 08 : 20 : 16 : unit_office에서 select *를 말하면 다음과 같은 ID가 필요합니다. mandal_master에서 08-hyderabad, 20 - nizampet 등의 경우 다음과 같습니다. – verve

+0

아직 이해가 안됩니다. 게시물을 수정하고 두 테이블에 대한 샘플 데이터를 포함시켜 주시겠습니까? –

답변

1

테이블을 다시 디자인하는 것이 좋지만 그렇지 못할 경우 mandal_ids 문자열을 정수로 나눠서 이름에 매핑하는 함수를 정의해야 할 수도 있습니다. PostgreSQL documentation on creating functions을 읽어 보시기 바랍니다. "PL/pgSQL"언어가 좋은 선택 일 수 있습니다. 함수 string_to_array and array_to_string을 사용할 수 있습니다.

하지만 할 수 있다면, 나는 다음과 같은 방법으로 테이블을 정의 제안 :

SELECT string_agg(m.name,',') AS mandal_names, 
     max(o.name) AS office_name 
     FROM mandals_in_offices i 
     INNER JOIN unit_offices o ON i.office_id = o.id 
     INNER JOIN mandals m ON i.mandal_id = m.id 
     GROUP BY o.id; 

string_agg가 나타났다 기능 :

mandals: 
    id name 
    16 Hiramandalam 
    20 Gara 

unit_offices: 
    id name 
    1 test sample 

mandals_in_offices: 
    office_id mandal_id 
    1   16 
    1   20 

다음 쿼리의 출력은 당신이 필요로해야한다 PostgreSQL 버전 9에서는 이전 버전을 사용하는 경우 비슷한 기능을 직접 작성해야 할 수도 있습니다. 나는 이것이 너무 어렵지 않을 것이라고 생각한다.

0

는 여기에 우리가 LedgerSMB에 무슨 짓을했는지 :

  1. 만든 연결을 집계 할 수있는 사용자 정의 집계를 수행하는 함수를 만들었습니다.

이렇게하면 쉽게 할 수 있습니다.

CREATE OR REPLACE FUNCTION concat_colon(TEXT, TEXT) returns TEXT as 
$$ 
select CASE WHEN $1 IS NULL THEN $2 ELSE $1 || ':' || $2 END; 
$$ language sql; 

CREATE AGGREGATE concat_colon (
     BASETYPE = text, 
     STYPE = text, 
     SFUNC = concat_colon 
); 

다음을 수행 할 수 있습니다

select concat_colon(mycol::text) from mytable; 

작품 잘.

관련 문제