在线求一条合并计算SQL语句

lsp69 2016-03-06 12:27:17
有以下表:
ID InQ OutQ sQ
3 1 0 291
2 0 10 290
1 300 0 300

要实现,也就是sQ等于前一条的sQ+(InQ-OunQ)
291=290+(1-0)

用一条语句怎样实现?
...全文
182 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongsheng10101 2016-03-11
  • 打赏
  • 举报
回复
select *,InQ-QutQ + (select sum(InQ-QutQ) from table_sq where [ID]<a.[ID]) sQ from table_sq a
道素 2016-03-06
  • 打赏
  • 举报
回复
楼上是通过所有入减去出得到当前上下的,下面是仅考虑上一次剩下的再加上本次入再减去本次出的算法:


WITH a(ID,InQ,OutQ , sQ) AS (
	select 3,1 , 0 ,291 UNION
    select 2 ,0 ,10, 290 UNION
    select 1, 300, 0 , 300
)
SELECT ID,a.InQ,a.OutQ,a.sQ,isnull(b.LastQ,0)+Inq-OutQ AS sQ_Cal,b.lid FROM a 
OUTER APPLY (SELECT TOP 1 la.id,  la.sQ FROM a  AS la WHERE la.id<a.ID ORDER BY id desc) b(lid,LastQ)  —上一次
ORDER BY a.ID DESC
/*
ID	InQ	OutQ	sQ	sQ_Cal	lid
3	1	0	291	291	2
2	0	10	290	290	1
1	300	0	300	300	NULL
*/

Ekun_sky 2016-03-06
  • 打赏
  • 举报
回复
with a(id,inq,qutq) as (
select 3,1,0 union all
select 2,0,10 union all
select 1,300,0)


select *,(select sum(b.inq-b.qutq) from a as b where a.id>=b.id) as sq  from a

/**
id  inq qutq sq
3	1	0	291
2	0	10	290
1	300	0	300
**/



34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧