decode(a,b,c,d);如果a的结果为b,那么返回c,否则a的结果为d);

解决方案 »

  1.   

    一个典型的行转列的交叉表SQL语句
    用意在于对于每个不同的EMPLO,用子查询按由高到低的顺序先分别取出最高的3个SALARY记录,然后分别作为SALARY1,SALARY2,SALARY3的值输出,其中,SALARY1对应最高的SALARY,SALARY3对应第三高的SALARY。
      

  2.   

    max()为取最大值;
    decode()相当于if-then-else语句。
      

  3.   

    over (partition by employerid
                order by salary desc nulls last) top3有什么作用?
      

  4.   

    partition by 和 group by 有什么区别,一般什么时候使用?max(decode(top3,1,salary,null)) salary1,能解释一下这句话的使用吗?row_number() 在这条SQL中起到了什么作用?
      

  5.   

    max(decode(top3,1,salary,null)) salary1
    如果top3是1,取salary的最大值,salary1是字段名
    partition by 不清楚,关注
      

  6.   

    over()是Oracle 8i以上版本提供的分析函数row_number() over (partition by employerid order by salary desc nulls last) top3即根据employerid分组,按照 salary 逆序排列,并将 null 值在排序的最后列出,将每个 salary 在同一个employerid分组范围内,对应的排序序号值赋给别名 top3
      

  7.   

    row_number()
          over (partition by employerid
                order by salary desc nulls last)ROW_NUMBER ( ) OVER ( [query_partition_clause] order_by_clause )是Oracle数据仓库中的分析函数,这就是它的语法。
    ROW_NUMBER函数返回 query_partition_clause 部分每行的唯一值(由ORDER BY确定,从1开始) 。
      

  8.   

    达到同样的效果,我见别人使用过如下的用法:select employerid ,salary,top3 from(
    select employerid ,salary,row_number()over (partition by employerid order by rank3 )  top3
    from (
    select employerid ,salary,rank3 from(
    select employerid ,salary,rank()over(partition by employerid order by salary desc) as rank3 from xxx)
     where rank3<=3
     )
     ) 
     where top3<=3其中的rank()over(partition by employerid order by salary desc) as rank3 from xxx是什么意思啊?和row_number() over (partition by employerid order by salary desc nulls last)有什么区别?
      

  9.   

    fly115作品:SQL行列转换实战http://www.cnoug.org/viewthread.php?tid=21713
      

  10.   

    我看了很多遍大家的讲解,可是top3是什么东西?
    谢谢!