select max(decode(t$cpft,'010',t$valu)),t$colt,max(decode(t$cpft,'015',t$valu))
from tabname
group by t$colt

解决方案 »

  1.   

    用 decode()函数可以实现你的功能!DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)该函数的含义如下:
    IF 条件=值1 THEN
        RETURN(翻译值1)
    ELSIF 条件=值2 THEN
        RETURN(翻译值2)
        ......
    ELSIF 条件=值n THEN
        RETURN(翻译值n)ELSE
        RETURN(缺省值)
    END IF
      

  2.   

    select t$colt,sum(decode(t$cpft,'010',t$valu,null)),sum(decode(t$cpft,'015',t$valu,null))
    from tabname
    group by t$colt
      

  3.   

    没有办法处理 因为 sum函数仅仅可以对number类型处理 不能对字符类型处理 所以大家的方法都不正确
    如果转换成number类型可以使用 skystar99047(天星) 
    select t$colt,
           sum(decode(t$cpft,'010',t$valu,null)),
           sum(decode(t$cpft,'015',t$valu,null)),from tabname
    group by t$colt
      

  4.   

    大家是不是理解错了楼主的真实意图了?用表的自联接:
    select a.t$valu as 发动机号 , a.t$colt as 底盘号, b.t$valu as 变速箱号
    from   tabname a, tabname b
    where  a.t$colt = b.t$colt
      and  a.t$cpft = '010'
      and  b.t$cpft = '015'另外从你的数据看,所有t$cpft='040'的行,都可以删除(冗余数据)。
      

  5.   

    select a.t$valu as 发动机号,a.t$colt as 底盘号,bt$valu as 变速箱号, from yourtable a,yourtable b where a.t$colt=b.t$colt and a.t$cpft='010' and b.t$cpft='015'
      

  6.   

    改进一下:select b.t$valu 发动机号,a.t$valu 底盘号,c.t$valu 变速箱号, 
    from yourtable a,yourtable b,yourtable c 
    where a.t$cpft='040' 
      and b.t$cpft(+)='010' 
      and c.t$cpft(+)='015'
      and a.t$colt=b.t$colt(+) 
      and a.t$colt=c.t$colt(+) 因为每一辆车至少占一行,但不一定占三行。
    t$colt必须有索引,否则性能有问题。
      

  7.   

    使用decode,同意 skystar99047(天星)
      

  8.   

    select max(decode(t$cpft,'010',t$valu)),t$colt,max(decode(t$cpft,'015',t$valu))
    from tabname
    group by t$colt
      

  9.   

    推荐用 beckhambobo(beckham) 高人的方法.
    SELECT MAX(DECODE(t$cpft,'010',t$valu)),t$colt,MAX(DECODE(t$cpft,'015',t$valu))
    FROM tabname
    GROUP BY t$colt
    -------------------------------------------------------------------------------
    其实这是个很典型的,用分组方法 显示行列交换 的方法.
    以上用了 MAX 函数,其实用 MIN(),SUM() 之类的函数都可以实现同样的功能.
    (只要是分组函数就可以了)
    ===============================================================================希望楼下的给点掌声 beckham 版主. 活活...[推荐收藏...]
      

  10.   

    推荐用 beckhambobo(beckham) 高人的方法.
    SELECT MAX(DECODE(t$cpft,'010',t$valu)),t$colt,MAX(DECODE(t$cpft,'015',t$valu))
    FROM tabname
    GROUP BY t$colt
    -------------------------------------------------------------------------------
    其实这是个很典型的,用分组方法 显示行列交换 的方法.
    以上用了 MAX 函数,其实用 MIN(),SUM() 之类的函数都可以实现同样的功能.
    (只要是分组函数就可以了)
    =======================
    又学了一招,嘿嘿
      

  11.   

    SELECT sum(DECODE(t$cpft,'010',t$valu)),t$colt,sum(DECODE(t$cpft,'015',t$valu))
    FROM tabname
    GROUP BY t$colt