根据sql server中的结果查询检查订单行

时间:2015-11-08 03:23:35

标签: sql-server sql-server-2008

我有一张桌子检查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

如何解决此问题

2 个答案:

答案 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.AllTask​​No,Checks2.CheckQuosimaNo,Checks2.Masroof,Checks2.Maqbood,Checks2.Date1,rank()OVER(ORDER BY checks2.date1,checks2.CheckQuosimaNo)as rank INTO Checks3 来自Checks2 INNER JOIN
AllTask​​s ON Checks2.AllTask​​No = AllTask​​s.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.AllTask​​No,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订购