2016-07-25 4 views
1

Oracle 11g에서 일부 행을 열로 표시 할 수 있는지 궁금합니다.Oracle SQL - 행 수

나는 다음과 같이 표시 할 다음

id  language  text 
-------------------------- 
1  english  some example 
1  german  an example 
2  english  test 
2  german  test123 

원하는 :

id  english  german 
--------------------------------- 
1  some example an example 
2  test   test123 

내가 pivot를 사용하여 시도했지만 제대로 처리하는 방법을 알아낼 수 없습니다, pivot가 필요하기 때문에 집계 함수.

+1

unpivot에 ... PIVOT 자체 집계 함수입니다; 그것은 종종 집계없이 (단지 피벗 된 하나의 값으로) 사용되며, vkp가 그의 해결책에서 보여준 것처럼'max()'또는'min()'을 사용할 수 있습니다. 표를 전치시키기 위해 PIVOT이 작성되지 않았습니다. 그것은 "텍스트"열에 숫자 (달러 금액 등)가있을 수 있고,'id' -'language' 조합 당 여러 행이있는 상황을 위해 만들어졌으며, 피벗을 사용하여 그 숫자를 추가하거나 그래서 테이블을 조바꿈시키기 위해서 PIVOT을 사용할 때'max()'나'min()'을 사용해야 만합니다. – mathguy

답변

2

ID 당 언어 당 텍스트가 하나 있다고 가정하면 pivot의 텍스트 열에 max 또는 min을 사용할 수 있습니다.

select * from tablename 
pivot 
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN)) 

편집 : OP의 의견 내가 그 경우 모든 선택하지 않으려면 SELECT 쿼리가 어떻게 작동하는지 알아내는 데 문제가 기준으로합니다. 뭔가를 선택하거나 텍스트가 tablename 또는 유사한 것으로 작동하지 않습니다.

pivot 인 모든 열을 선택해야합니다.

select * from 
(select text,language,id,something from tablename) t 
pivot 
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN)) 

편집 : 사용 전체 포인트의

select * 
from (
select * from 
(select text,language,id,something from tablename) t 
pivot 
(max(text) for language in ('english' as ENGLISH,'german' as GERMAN)) 
) p 
unpivot (text for language in (ENGLISH, GERMAN)) 
+2

이것이 열 이름을 큰 따옴표로 묶을 것이라고 생각합니다. 'for language in (...)'절에리스트의 각 열에 대한 별명을 포함함으로써 피할 수 있습니다 (원할 경우). – mathguy

+1

당신은 정확합니다 (컬럼 이름은 별명없이 작은 따옴표로 표시됩니다.) .i 해답을 편집했습니다. –

+0

이 작품, 고마워요. 그러나 그 경우에 모든 것을 선택하고 싶지 않으면'SELECT' 쿼리가 어떻게 작동하는지 알아 내는데 어려움을 겪고 있습니다. 'SELECT something, text FROM tablename' 또는 유사한 것이 작동하지 않습니다. 예를 들어 설명해 주시겠습니까? – OldMcDonald