Pivoting of data using two columns

前端 未结 3 1389
太阳男子
太阳男子 2020-11-29 07:28

I have data in pivoted format. It looks like this:

-----------------------------------------
| user_id |  org  |   position  | lang  |
----------------------         


        
相关标签:
3条回答
  • 2020-11-29 08:04

    Here is a way to get the data in the format you want:

    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
    

    See SQL Fiddle with Demo

    0 讨论(0)
  • 2020-11-29 08:09

    11gr2 PIVOT example

    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.
    
    0 讨论(0)
  • 2020-11-29 08:27

    PIVOT should work fine - SQL Fiddle demo (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)
          );
    
    0 讨论(0)
提交回复
热议问题