对两列使用 max函数 的sql语句
T_TABLE   表结构: 
 p_code,pid,valueA,valueB,remark     
 在同一记录集里,取valueA、valueB的最大值,并且valueB优先。   
 例: 
 p_code      pid      valueA      valueB      remark 
 ------------------------------------ 
 001               99         200               3                     xxx 
 002               99         100               6                     xxx   
 如果只是取valueA的最大值,那就是取第一行,但是业务要求,需要考虑 
 第二行,上面的记录集里是第二行的valueB值大, 
 所以舍去第一行,最后应该取第二行的记录。   
 不知道这样的需求用一条sql语句能否写出来?不然就要通过应用程序多次的访问 
 数据库才能达到目的。     
 如果只考虑valueA的最大值: 
 select   pid,MAX(valueA)   from   T_TABLE   where   p_code   in( '001 ', '002 ') 
 group   by   pid      
 但是需要同时考虑valueA和valueB,并且valueB优先....... 
 这样是肯定不行的: 
 select   pid,MAX(valueA),MAX(valueB)   from   T_TABLE   where   p_code   in( '001 ', '002 ') 
 group   by   pid    
------解决方案--------------------最终目的不是取记录吗?排序不行吗 
 形如: 
 select * from 
 ( 
  select * from T_TABLE 
  order by valueB desc, valueA desc 
 ) 
 where rownum  <= 1
------解决方案--------------------楼主一开始应该描述清楚嘛,这样行么 
 SELECT pid,max(valueA) valueA,valueB from T_TABLE where (pid,valueB) in ( 
   SELECT  pid,valueA,max(valueB) valueB from  T_TABLE group by pid,valueA  
   ) 
 group by pid,valueB
------解决方案--------------------select p_code,pid,valueA,valueB from 
 (select p_code,pid,valueA,valueB,row_number()over(partition by pid order by pid,valueb desc,valuea desc)r from T_TABLE  
 ) where r=1   
------解决方案--------------------呵呵,不好意思,desc后面少了一个逗号,Try again.   
 select pid,valueA,valueB from 
 ( select pid,valueA,valueB, rank() over ( partition by pid order by valueA desc, valueB desc) ordernum from T_TABLE where ordernum = 1 ) 
 order by pid ; 
------解决方案--------------------SELECT   pid, MAX (valuea), valueb 
 FROM     t_table x 
 WHERE    p_code IN ( '001 ',  '002 ') AND (pid, valueb) = (SELECT pid, MAX (valueb) 
                                                        FROM   t_table 
                                                        WHERE  p_code IN ( '001 ',  '002 ')) 
 GROUP BY pid, valueb;