두 개의 열을 사용하여 데이터 피벗
피벗 형식의 데이터를 가지고 있습니다.다음과 같습니다.
-----------------------------------------
| user_id | org | position | lang |
-----------------------------------------
| 1001 | USE | Boss | EN |
| 1001 | USD | Bossa | FI |
| 1002 | GWR | Dim | SV |
| 1003 | GGA | DCS | FI |
| 1003 | GCA | DDD | SV |
-----------------------------------------
데이터를 다음과 같이 표현하고 싶습니다.
-------------------------------------------------------------------------------------
| user_id | org_fi | position_fi | org_en | position_en | org_sv | position_sv |
-------------------------------------------------------------------------------------
| 1001 | USD | Bossa | USE | Boss | | |
| 1002 | | | | | GWR | Dim |
| 1003 | GGA | DCS | | | GCA | DDD |
-------------------------------------------------------------------------------------
명령어로 연결하는 피벗 쿼리가 필요하다고 생각합니다.
이것이 제가 시도한 것입니다.
SELECT user_id,
org,
position,
lang,
ROW_NUMBER () OVER (PARTITION BY lang, user_id ORDER BY ROWID) rn
FROM source
하지만 앞으로 어떻게 나아가야 할지 전혀 모르겠습니다.
PIVOT
잘 작동해야 함 - SQL Fiddle 데모(schema borrowed from bluefeets answer)
SELECT *
FROM source
PIVOT (
MIN(org) AS org,
MIN(position) AS position
FOR lang
IN('EN' AS en, 'FI' AS fi, 'SV' AS sv)
);
원하는 형식으로 데이터를 가져올 수 있는 방법은 다음과 같습니다.
SELECT user_id,
max(case when lang = 'FI' THEN org ELSE ' ' END) org_fi,
max(case when lang = 'FI' THEN position ELSE ' ' END) position_fi,
max(case when lang = 'EN' THEN org ELSE ' ' END) org_en,
max(case when lang = 'EN' THEN position ELSE ' ' END) position_en,
max(case when lang = 'SV' THEN org ELSE ' ' END) org_sv,
max(case when lang = 'SV' THEN position ELSE ' ' END) position_sv
FROM source
group by user_id
order by user_id
11gr2 피벗 예제
SQL> create table t1
(
user_id number,
org varchar2(10),
position varchar2(10),
lang varchar2(10)
)
Table created.
SQL> insert into t1 values (1,'ABC','VVV','EN')
1 row created.
SQL> insert into t1 values (1,'DEF','WWW','FI')
1 row created.
SQL> insert into t1 values (2,'GHI','XXX','FI')
1 row created.
SQL> insert into t1 values (2,'JKL','YYY','SV')
1 row created.
SQL> insert into t1 values (3,'MNO','ZZZ','EN')
1 row created.
SQL> commit
Commit complete.
SQL> select * from t1
USER_ID ORG POSITION LANG
---------- ---------- ---------- ----------
1 ABC VVV EN
1 DEF WWW FI
2 GHI XXX FI
2 JKL YYY SV
3 MNO ZZZ EN
5 rows selected.
SQL> select * from t1
pivot(max(org) as org, max(position) as position for lang in ('EN' as "EN",'FI' as "FI",'SV' as "SV"))
USER_ID EN_ORG EN_POSITION FI_ORG FI_POSITION SV_ORG SV_POSITION
---------- ---------- ----------- ---------- ----------- ---------- -----------
1 ABC VVV DEF WWW
2 GHI XXX JKL YYY
3 MNO ZZZ
3 rows selected.
언급URL : https://stackoverflow.com/questions/11987067/pivoting-of-data-using-two-columns
'programing' 카테고리의 다른 글
"Increct Content-Type:" 예외는 각도 mvc 6 응용 프로그램을 던집니다. (0) | 2023.10.31 |
---|---|
jquery를 사용하여 통화를 올바르게 포맷하려면 어떻게 해야 합니까? (0) | 2023.10.31 |
주어진 중단점에 도달할 때까지 GDB에서 실행되는 모든 행을 자동으로 인쇄하는 방법은 무엇입니까? (0) | 2023.10.31 |
last_value window 함수가 제대로 작동하지 않습니다. (0) | 2023.10.31 |
TextReader 대신 문자열에서 역직렬화 (0) | 2023.10.31 |