2012-10-09 2 views
0

열 변수를 사용하여 피벗 또는 크로스 탭을 사용하여 쿼리를 만들어야합니다. 가능하니?Postgresql - 변수 번호가있는 교차 탭 또는 피벗

Data_Id ! Description_Column | Value 
--------+--------------------+------- 
1  ! Column1   ! value1 
1  ! Column2   ! value2 
1  ! Column3   ! value3 
1  ! Column4   ! value4 
2  ! Column1   ! value5 
2  ! Column2   ! value6 
2  ! Column3   ! value7 
2  ! Column4   ! value8 

내가

Data_Id ! Column1 ! Column2 ! Column3 ! Column4 
1  ! value1 ! value2 ! value3 ! value4 
2  ! value5 ! value6 ! value7 ! value8 

을받을 필요하지만 가끔은 내가해야합니다 : 나는 다음과 같은 테이블이

Data_Id ! Description_Column | Value 
--------+--------------------+------- 
3  ! Column1   ! value1 
3  ! Column2   ! value2 
4  ! Column1   ! value5 
4  ! Column2   ! value6 

내가 얻을 필요를

Data_Id ! Column1 ! Column2 
3  ! value1 ! value2 
4  ! value5 ! value6 

것을 제외 . 필요한 행은 조인을 통해 선택됩니다. 그래서 가변 개수의 열을 갖게 될 것입니다.

도움 주셔서 감사합니다.

+1

SQL 반 패턴입니다. 한 가지 진술만으로는 그렇게 할 수 없습니다. 똑같이, 당신이 'Dynamic Pivot'을 위해 SO를 검색한다면, 당신은 많은 해답을 발견 할 것입니다; SQL을 작성하는 코드. * (x 열의 경우 y 열과 다른 SQL이 필요하므로 적절한 열 수만큼 SQL을 작성하는 코드가 필요합니다.) * 대부분의 경우 데이터를 원래의 정규화 된 형식으로 유지해야합니다. 사용자 인터페이스 나 다른 처리 계층에서 피벗 할 수도 있지만 SQL에서 그렇게하는 것이 좋습니다. [http://stackoverflow.com/questions/8833679/create-dynamic-table-from-function-in-postgresql] – MatBailie

+0

이렇게하면 약 40 개의 서로 다른 쿼리가 필요합니다. 다른 유형의 데이터 용 테이블 만 사용되었습니다. 약 40 개의 테이블을 생성하는 대신이 형식으로 1 개만 사용했습니다. – NakaBr

+0

40 개의 쿼리가 필요할 수도 있지만 이러한 쿼리를 동적으로 생성 할 수있는 쿼리를 작성할 수 있습니다. 이를 수행 할 수있는 단일 쿼리가 없습니다. 나는 연결된 대답과 다른 답변을 읽는 것이 좋습니다. – MatBailie

답변

0

SQL 플래너는 계획시 반환 행이 대략적인 형태로 표시되어야 함을 기억해야합니다. 따라서 직접 할 수는 없습니다.

당신이하려는 일을하는 함수를 만들 수 있으며, 결과를 refcursor에 반환 할 수 있습니다. 아마도 그렇게하는 것이 가장 쉬운 방법 일 것입니다. tablefunc contrib 모듈/확장 프로그램의 crosstab() 함수를 사용하십시오. 데이터 쿼리를 기반으로 실행되도록 SQL 쿼리를 생성 할 수 있어야하지만 함수에서 동적 SQL이 필요하고 다시 refcursor를 반환해야합니다.