2012-07-18 3 views
1

포크,이름 값 쌍 테이블에서 오라클 뷰 생성

나는 이름 값 쌍을 가진 오라클 데이터베이스 테이블을 가지고 있습니다. 이름 값 쌍 세트는 row_num에 의해 식별됩니다. 또한 설정된 크기가 다를 수 있습니다.

이름 값 쌍을 한 행으로 변환하는보기를 만들고 싶습니다.

나는

날이

난 당신이 편리

감사

create table name_value_pair (row_num varchar2(32), name varchar2(32),value varchar2(32)); 

insert into name_value_pair values ('row1', 'Col1', 'Val11'); 
insert into name_value_pair values ('row1', 'Col2', 'Val12'); 
insert into name_value_pair values ('row1', 'Col3', 'Val13'); 
insert into name_value_pair values ('row1', 'Col4', 'Val14'); 
insert into name_value_pair values ('row1', 'Col5', 'Val15'); 

insert into name_value_pair values ('row2', 'Col1', 'Val21'); 
insert into name_value_pair values ('row2', 'Col2', 'Val22'); 
insert into name_value_pair values ('row2', 'Col3', 'Val23'); 
insert into name_value_pair values ('row2', 'Col4', 'Val24'); 
insert into name_value_pair values ('row2', 'Col5', 'Val25'); 

insert into name_value_pair values ('row3', 'Col1', 'Val31'); 
insert into name_value_pair values ('row3', 'Col2', 'Val32'); 
insert into name_value_pair values ('row3', 'Col3', 'Val33'); 
insert into name_value_pair values ('row3', 'Col4', 'Val34'); 
insert into name_value_pair values ('row3', 'Col5', 'Val35'); 

insert into name_value_pair values ('row4', 'Col1', 'Val41'); 
insert into name_value_pair values ('row4', 'Col2', 'Val42'); 
insert into name_value_pair values ('row4', 'Col3', 'Val43'); 
insert into name_value_pair values ('row4', 'Col4', 'Val44'); 
insert into name_value_pair values ('row4', 'Col5', 'Val45'); 

insert into name_value_pair values ('row5', 'Col1', 'Val51'); 
insert into name_value_pair values ('row5', 'Col2', 'Val52'); 
insert into name_value_pair values ('row5', 'Col3', 'Val53'); 
insert into name_value_pair values ('row5', 'Col4', 'Val54'); 
insert into name_value_pair values ('row5', 'Col5', 'Val55'); 

commit; 
+0

EAV 데이터베이스 디자인에 오신 것을 환영합니다. –

답변

1

에 대한 테이블 생성 및 삽입 샘플 SQL을 준 정의하는 방법을 알려 주시기 바랍니다 내 질문에 분명하다 희망 보기를 만들 때 쿼리를 사용할 수 있습니다.

select 
    row_num, 
    max(decode(name, 'Col1', value)) col1, 
    max(decode(name, 'Col2', value)) col2, 
    ... 
from name_value_pair 
group by row_num; 

아마 데이터 모델을 재고해야합니다. 이런 종류의 데이터 모델은 끔찍합니다. 쿼리는 최적화 할 수없고 제약 조건을 설정하기가 어려우며 데이터 무결성을 유지하는 것은 거의 불가능합니다.

+0

디코드가 표현식에 의한 그룹이 아닙니까? 오류 아래에 있습니다 ora-00979 : 표현식이 아닌 그룹 00979. 00000 - "GROUP BY가 아님" – sigirisetti

+0

죄송합니다. 나는 그 오류를 수정했다. – ntalbs

+0

지금 해봐. 고마워 친구. 큰 데이터 세트에서 어떻게 확장되는지 확인해야합니다. – sigirisetti