看到:
http://topic.csdn.net/t/20050407/17/3917652.html
的问题如下:
有一个职员的数据表,字段如下:
Name, Salary, Age
A,900, 20
B,900, 21
C,1000, 18
D,950, 20
现在我想做一个报表,用到了sum() over(),SQL如下:
select Name, Salary, sum(Salary) over(order by Salary) SubSal from emp order by Salary;
想要的结果如下:
Name, Salary, SubSal
A, 900, 900
B, 900, 1800
D, 950, 2750
C, 1000, 3750
没想到结果却如下:
Name, Salary, SubSal
A, 900, 1800 ??
B, 900, 1800
D, 950, 2750
C, 1000, 3750
这是为什么,第一行的SubSal 为什么不是900?
各位高手,请帮帮小弟,看看该怎么写SQL语句。
----------------------------------------------
比较标准的答案应该是:
select Name, Salary, sum(Salary) over(order by Salary,Name) SubSal from emp ;
我想,假如只有Salary 这一个字段:
Salary
900
900
1000
950
那么该如何写累计的SQL呢?
我想这样写最好:
select sum(Salary) over(order by Salary,rowid) SubSal from emp ;
比较通用,保证在任何情况下累计值都不会重复;
我想再扩展下,比如:
薪水 , 是否统计
900 否
900 是
1000 是
1050 否
1100 是
想要的结果:
薪水 , 是否统计 累计值
900 否 null
900 是 900
1000 是 1900
1050 否 null
1100 是 3000
我想这样写
select sum(薪水) over(where 是否统计='是' order by 薪水 ,rowid) 累计值 from emp ;
结果报错,
尝试把 where 换成having 也不行:
select sum(薪水) over(having 是否统计='是' order by 薪水 ,rowid) 累计值 from emp ;
这个该如何实现呢,其实我的问题就是: 在分析函数 over 后面如何加where 条件?