原始表定义及数据:
用户ID 家属名称 显示顺序
========================
user1  父亲    1
user1  母亲    2
user1  叔叔    3
user2  父亲    3
user2  母亲    2
user2  叔叔    1
user3  叔叔    3    =》注意,可以跳着发顺序啊,真是shit
========================希望能用一个sql转变为:
========================
用户ID 家属名称1 家属名称2
user1  父亲      母亲
user2  叔叔      母亲
user3  叔叔      
========================
不需要显示家属名称3.
不能使用Procedul,只用一个sql。呵呵

解决方案 »

  1.   

    SELECT 
      用户ID, 
      MAX(DECODE(显示顺序, 1,家属名称, ''))   家属名称1,
      MAX(DECODE(显示顺序, 2,家属名称, ''))   家属名称2
    FROM 表
    GROUP BY 用户ID
      

  2.   

    TRY:SELECT 用户ID,MAX(DECODE(显示顺序,'1',家属名称,'')) AS 家属名称1,
    MAX(DECODE(显示顺序,'2',家属名称,'')) AS 家属名称2
    FROM TBNAME GROUP BY 用户ID;
      

  3.   


    select 用户ID, 家属名称, row_number() over (partition by 用户ID order by 显示顺序) as "显示顺序" from 表就能得到标准的“显示顺序”