我有一张桌子检查2:
vn.expandWhitespace(vn.getContentFragment())
我有一个查询来获得平衡:
AllTaskNo int,
CheckQuosimaNo int,
Masroof numeric(18,3),
Maqbood numeric(18,3),
Date1 smalldatetime
结果是: enter image description here
我需要制作一个公式(例如excel,例如NetAmount = NetAmount之前+ Maqbood - Masroof) 我希望NetAmount中的选定行= 656360,然后查询生成NetAmount = 5567675.976
如何解决此问题
答案 0 :(得分:0)
有很多方法可以执行此操作,例如Over和Correlated Sub Queries
在:
SELECT
AllTaskNo ,Maqbood , Masroof,
SUM(-1*Maqbood +Masroof) OVER (ORDER BY AllTaskNo ) AS NetAmount
FROM Checks2 T1
相关子查询(需要Sql server 2014 +)
SELECT
AllTaskNo ,Maqbood , Masroof,
(
SELECT
SUM(-1*Maqbood +Masroof)
FROM Checks2 T2
WHERE T2.AllTaskNo <=T1.AllTaskNo
) AS NetAmount FROM Checks2 T1
如果您对此项目有任何进一步的帮助,请随时发表评论
答案 1 :(得分:0)
我已经通过自己的解决方案解决了我的问题...我认为有一个更短的解决方案......但是我得到了我想要的任何方式...我的解决方案是: 1-使用名为(rank)的新字段创建一个表(Checks3),该字段是命令结果的正确顺序。 2-创建一个新命令,主要类似于第一个包含(银行余额公式)的命令。 if exists(select * from dbo.sysobjects,其中id = object_id(N&#39; [dbo]。[Checks3]&#39;)和OBJECTPROPERTY(id,N&#39; IsUserTable&#39;)= 1)drop table [ DBO]。[Checks3]
SELECT Checks2.BankNo,Checks2.AllTaskNo,Checks2.CheckQuosimaNo,Checks2.Masroof,Checks2.Maqbood,Checks2.Date1,rank()OVER(ORDER BY checks2.date1,checks2.CheckQuosimaNo)as rank
INTO Checks3
来自Checks2 INNER JOIN
AllTasks ON Checks2.AllTaskNo = AllTasks.No,其中Checks2.BankNo = 6和(Checks2。[Date1] BETWEEN CONVERT(DATETIME,&#39; 01/10 / 2015&#39;,103)和CONVERT(DATETIME,&#39) ; 31/10 / 2015&#39;,103))订购CHECKS2.BankNo,CHECKS2.CheckQuosimaNo
SELECT Checks3.AllTaskNo,Checks3.CheckQuosimaNo,Checks3.Masroof,Checks3.Maqbood,Checks3.Date1,
(SELECT 0 + SUM(t2.Maqbood - t2.Masroof)FROM Checks3 t2
在哪里t2.BankNo = 6和t2.rank&lt; = Checks3.rank
和(t2。[Date1] CONVERT(DATETIME,&#39; 01/10 / 2014&#39;,103)和CONVERT(DATETIME,&#39; 31/10 / 2015&#39;,103))
)作为NetAmount
来自Checks3
其中Checks3.BankNo = 6和(Checks3。[Date1] BETWEEN CONVERT(DATETIME,&#39; 01/10 / 2014&#39;,103)和CONVERT(DATETIME,&#39; 31/10 / 2015&#39; ,103))CHECKS3.RANK订购