主表和从表的表结构如下附件所示。主表中有记录
编码  属性一 属性二
1     0001   设备一
从表中有记录
编码  编码2  name  value
1      1     长度  100
2      1     高度  20
3      1     重量  50要求查询出的结果是
编码  属性一  属性二 长度  高度 重量
1     0001    设备一  100  20   50也就是后三项目是从表的行转变成的列。上述需求,该如何处理,请高人指点。

解决方案 »

  1.   

    又是行列转换噢,设a为主表,b从表
    select  a.编码,a.属性一,a.属性二,sum(decode(b.name,'长度'),b.value,0) 长度 ,
           sum(decode(b.name,'高度'),b.value,0) 高度 ,
           sum(decode(b.name,'重量'),b.value,0) 重量 
    from a,b
    where a.编码=b.编码2
    group by a.编码,a.属性一,a.属性二
      

  2.   

    首先谢谢回复!
    上面的方法对于数字是能够解决,不知道value值为字符的时候能否解决。
      

  3.   

    http://www.soft6.com/tech/5/59034.html
      

  4.   

    如果是数字型字符,那也没问题,大不了用to_number来转一下
    sum(decode(b.name,'高度'),to_number(b.value),0) 高度 
    如果是汉字或者全角型就比较麻烦了,应该先写个函数来转换下
      

  5.   

    参考http://www.soft6.com/tech/5/59034.html
      

  6.   

    我这里什么都有可能,是用户定义属性,然后输入值,因此可能不能用sum函数,还要想别的办法。
      

  7.   

    那就用max
    max(decode(b.name,'高度'),b.value,null) 高度 , 
      

  8.   

    用MAX的话,最好是保证每个编码的长度之类的都只有一条纪录
    如果有多条纪录就会麻烦点,max不能保证出来你想要的
      

  9.   

    谢谢hebo2005,我差点用野蛮的子查询了。