日期:2014-05-16  浏览次数:20756 次

Oracle行转列的特殊问题
一个表如下:
TB1:

姓名 用户编号 表类型 表码
张三 0001 电表 100.23
张三 0001 水表 56
张三 0001 水表 45
李四 0002 电表 200.45
李四 0002 水表 23

需转换为:

姓名 用户编号 电表 水表 水表
张三 0001 100.23 56 45
李四 0002 200.45 23 无

注:有的人家里有两块水表,有的人家里只有一块水表,还有重名的,用户编号是不重复的。
如何判断第二块水表呢?

------解决方案--------------------
上面的有问题 

SQL code

select user_name,
       user_id,
       sum(vla_1),
       sum(vla_2),
       sum(vla_3) 
from  
M student t
 WHERE t.stuid IN
       (SELECT substr(t1.str,
                      instr(t1.str, ',', 1, LEVEL) + 1,
                      decode(instr(t1.str, ',', 1, LEVEL + 1),
                             0,
                             length(str) + 1,
                             instr(t1.str, ',', 1, LEVEL + 1)) - instr(t1.str, ',', 1, LEVEL) - 1) s
          FROM dual, t1
        CONNECT BY LEVE