一个表如下:
TB1:姓名  用户编号  表类型  表码
张三  0001      电表    100.23
张三  0001      水表    56
张三  0001      水表    45
李四  0002      电表    200.45
李四  0002      水表    23需转换为:姓名  用户编号  电表  水表  水表
张三  0001      100.23  56  45
李四  0002      200.45  23  无注:有的人家里有两块水表,有的人家里只有一块水表,还有重名的,用户编号是不重复的。
如何判断第二块水表呢?

解决方案 »

  1.   

    select user_name,user_id,sum(vla_1),sum(vla_2),sum(vla_3) from 
    (select user_name,user_id,sum(码表) vla_1,'0' vla_2,'0' vla_3 from your_table where 表类型 = '电表'
    union all 
    select user_name,user_id,0,sum(case when rn = '1' then 码表 else 0 end)sum(case when rn = '2' then 码表 else 0 end) 
    from (select user_name,user_id ,码表,row_number() over(partition by user_id,表类型 order by 码表 ) rn from your_table )
    )
    group by 
    user_name,user_id
      

  2.   

    上面的有问题 
    select user_name,
           user_id,
           sum(vla_1),
           sum(vla_2),
           sum(vla_3) 
    from  
           (select user_name,
                   user_id,
                   sum(码表) vla_1,
                   '0' vla_2,
                   '0' vla_3 
            from   your_table 
            where 表类型 = '电表'
           union all  
            select user_name,
                   user_id,
                   0,
                   sum(case when rn = '1' then 码表 else 0 end),
                   sum(case when rn = '2' then 码表 else 0 end)  
            from   (select user_name,
                           user_id ,
                           码表,
                           row_number() over(partition by user_id,表类型 order by 码表 ) rn 
                    from   your_table 
                    where  表类型 = '水表')
           )
    group by  
    user_name,user_id
      

  3.   

    row_number() over(partition by user_id,表类型 order by 码表 ) rn问一下这句里面为什么要order by 码表  ?以表码大小排序会不会错位?