注册 登录
编程论坛 SQL Server论坛

开窗函数中OVER后有哪 些条件可写?

wmcwww 发布于 2012-11-19 15:12, 489 次点击
我想在查询客户账目时,除了查询贷方,借方外,还想分客户计算余额,可是在开窗函数后的OVER中不知道要用什么条件,请高手指教,多谢!!!
4 回复
#2
wmcwww2012-11-19 15:20
补充一下,用的查询是:
SELECT dbo.zm.khid,dbo.zm.df,dbo.zm.jf,
SUM(isnull(jf,0)-isnull(df,0)) OVER(PARTITION BY khid)
FROM dbo.zm
可是查询出的结果不是按每行累计的余额,而是每个客户的总余额。
#3
wmcwww2012-11-19 15:27
这是我的查询结果:
khid  df       jf     jf-df
3    0.00    464.00    0.00
3    464.00    NULL    0.00
4    0.00    274.00    0.00
4    274.00    NULL    0.00
5    0.00    410.00    62.00
5    0.00    814.00    62.00
5    814.00    0.00    62.00
5    0.00    1092.00    62.00
5    762.00    0.00    62.00
5    326.00    0.00    62.00
5    77.00    0.00    62.00
5    275.00    0.00    62.00
6    0.00    232.00    0.00
6    232.00    NULL    0.00
#4
半杯清茶2012-11-21 12:09
每一行应该是如下的吧?试试?我觉得没必要用开窗函数。PARTITION BY khid 这一句就决定了你的结果是按客户来划分的。
 
SELECT dbo.zm.khid,dbo.zm.df,dbo.zm.jf,
isnull(jf,0)-isnull(df,0) as jf -df
FROM dbo.zm
#5
wmcwww2012-11-21 19:29
谢谢!你所说的只能计算每行的合计,而不是“累计合计”,这个问题我用以下方法解决了,也没有用到开窗函数(不一定是最好的,请多指教):
select t2.khid,t2.df,t2.jf,
(select SUM(isnull(jf,0)-isnull(df,0)) from zm t1 where t2.khid=t1.khid and t1.zmid<=t2.zmid
)  as jf-df from dbo.zm t2 order by t2.khid,t2.zmid
因为在有点数据库中可以在OVER()中写入“从首行至本行”这样的条件,我想在SQL2008中也找到这样的写法,这样查询语句就简单多了。可是没找到,只能用以上方法先解决查询了
1