--测试数据
ENAME DEPTNO SAL
CLARK 10 2450
MILLER 10 1300
KING 10 5000
FORD 20 3000
ADAMS 20 1100
JONES 20 2975
SCOTT  20 3000
SMITH 20 800
ALLEN 30 1600
SELECT ename Ename, deptno Deptno, sal Sal, 
  SUM(sal) OVER (ORDER BY deptno, ename) RunningTotal,
  SUM(SAL) OVER (PARTITION BY deptno ORDER BY ename) DeptTotal, 
  ROW_NUMBER() 
    OVER (PARTITION BY deptno 
          ORDER BY ENAME) Seq
FROM emp 
ORDER BY deptno, ename 
--提示
'order' 附近有语法错误。
用的数据库是SQL Server 2005我从MSDN上找到一个提示:
在排名开窗函数的上下文中使用时,<ORDER BY 子句> 只能引用通过 FROM 子句可用的列。无法指定整数来表示选择列表中列名称或列别名的位置。<ORDER BY 子句>不能与聚合开窗函数一起使用。但是看不太懂,不知道我这个语句到底错在哪儿!先谢谢各位了!

解决方案 »

  1.   

    SELECT ename Ename, deptno Deptno, sal Sal, 
      SUM(sal) OVER (partition BY deptno, ename) RunningTotal,
      SUM(SAL) OVER (PARTITION BY deptno) DeptTotal, 
      ROW_NUMBER() 
        OVER (PARTITION BY deptno 
              ORDER BY ENAME) Seq
    FROM emp 
    ORDER BY deptno, ename 
      

  2.   

    SUM(sal) OVER (ORDER BY deptno, ename)
    里面应该是 partition by
      

  3.   


    SELECT ename Ename, deptno Deptno, sal Sal, 
      SUM(sal) OVER (ORDER BY deptno, ename) RunningTotal,
      SUM(SAL) OVER (PARTITION BY deptno ORDER BY ename) DeptTotal, 
      ROW_NUMBER() 
        OVER (PARTITION BY deptno 
              ORDER BY ENAME) Seq
    FROM emp 
    group by ENAME,DEPTNO,SAL,SEQ
    ORDER BY deptno, ename 
      

  4.   

    1,2,3楼的说的,我在SQL Server2005 里面试了,能行
    4楼的不能用,估计还是那个问题,<ORDER BY 子句>不能与聚合开窗函数一起使用。
    谢谢各位
      

  5.   

    但是 这个语句在Oracle 里面貌似能行得通呢?
    具体我是参考的这个网址的,他写的Oracle的版本,我在SQL Server2005里面试就不行,不知道是不是数据库之间的差别还是,SQL语法有规定吗?
      

  6.   


    SQL在未来的版本有望支持。