--测试数据
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 子句>不能与聚合开窗函数一起使用。但是看不太懂,不知道我这个语句到底错在哪儿!先谢谢各位了!
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
里面应该是 partition by
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楼的不能用,估计还是那个问题,<ORDER BY 子句>不能与聚合开窗函数一起使用。
谢谢各位
具体我是参考的这个网址的,他写的Oracle的版本,我在SQL Server2005里面试就不行,不知道是不是数据库之间的差别还是,SQL语法有规定吗?
SQL在未来的版本有望支持。