Jaa*_*nna 16 sql oracle oracle11g
我有透视格式的数据.它看起来像这样:
-----------------------------------------
| 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 |
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)
我想将数据表示为:
-------------------------------------------------------------------------------------
| 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 |
-------------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我认为需要使用connect by命令进行数据透视查询.
这就是我试图做的事情:
SELECT user_id,
org,
position,
lang,
ROW_NUMBER () OVER (PARTITION BY lang, user_id ORDER BY ROWID) rn
FROM source
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何前进.
Pet*_*ang 48
PIVOT
应该工作正常 - SQL小提琴演示 (借鉴bluefeets答案的架构)
SELECT *
FROM source
PIVOT (
MIN(org) AS org,
MIN(position) AS position
FOR lang
IN('EN' AS en, 'FI' AS fi, 'SV' AS sv)
);
Run Code Online (Sandbox Code Playgroud)
Tar*_*ryn 11
这是一种以您想要的格式获取数据的方法:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
60600 次 |
最近记录: |