2015-11-08 55 views
-1

我有一個表checks2:檢查順序排取決於結果查詢在SQL Server

AllTaskNo int, 
CheckQuosimaNo int, 
Masroof numeric(18,3), 
Maqbood numeric(18,3), 
Date1 smalldatetime 

我有一個查詢得到平衡:

SELECT 
    AllTaskNo 
    ,CheckQuosimaNo 
    ,Masroof 
    ,Maqbood 
    ,Date 
    ,(SELECT 0 + SUM(Maqbood - Masroof) AS Expr1 
     FROM Checks2 AS t2 
      WHERE (BankNo = 6) 
      AND (CheckQuosimaNo <= Checks2.CheckQuosimaNo) 
      AND (Date1 BETWEEN CONVERT(DATETIME, '01/01/2014', 103) 
      AND CONVERT(DATETIME, '31/10/2015', 103)) AND AllTaskNo 
      IN (SELECT No 
        FROM AllTasks 
        WHERE (BankNo = 6) 
         AND (Date BETWEEN CONVERT(DATETIME, '01/01/2014', 103) 
         AND CONVERT(DATETIME, '31/10/2015', 103))))) AS NetAmount 
FROM   
    Checks2 
WHERE  
    (BankNo = 6) 
    AND 
    (Date1 BETWEEN CONVERT(DATETIME, '01/01/2014', 103) 
    AND CONVERT(DATETIME, '31/10/2015', 103)) 
ORDER BY 
    BankNo 
    ,Date1 
    ,CheckQuosimaNo 

結果是: enter image description here

我需要做一個公式(比如excel,例如NetAmount = NetAmount + Maqbood - Masroof之前) 我期望NetAmount中的選定行= 65 6360,但隨後的查詢產生NetAmount = 5567675.976

我怎樣才能解決這個問題

回答

0

我已經通過我自己的解決方案解決我的問題。我認爲這是一個較短的解決方案的任何進一步的援助發表評論。但無論如何,我得到我想要的東西......我的解決辦法是: 1-製作一個表格(Checks3),其中包含一個名爲(rank)的新字段,它是命令結果的正確順序。 2-創建一個新的命令,大部分命令與第一個命令相同(銀行餘額公式)。如果存在(select * from dbo.sysobjects where id = object_id(N'[dbo]。[Checks3]')and OBJECTPROPERTY(id,N'IsUserTable')= 1)drop table [dbo]。[Checks3]

SELECT Checks2.BankNo,Checks2.AllTask​​No,checks2.CheckQuosimaNo,Checks2.Masroof,Checks2.Maqbood,Checks2.Date1,秩()OVER(ORDER BY checks2.date1,checks2.CheckQuosimaNo),爲秩 INTO Checks3 FROM Checks2 INNER JOIN
AllTask​​s ON Checks2.AllTask​​No = AllTask​​s.No where Checks2.BankNo = 6 and(Checks2。[Date1] BETWEEN CONVERT(DATETIME,'01/10/2015',103)AND CONVERT(DATETIME,'31/10/2015' ,103))ORDER BY 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
WHERE t2.BankNo = 6 and t2。排名< = Checks3.rank
and(t2。[Date1] BETWEEN CONVERT(DATETIME,'01/10/2014',103)AND CONVERT(DATETIME,'31/10/2015',103))
)as NetAmount FROM Checks3 where Checks3.BankNo = 6 and(Checks3。[Date1] BETWEEN CONVERT(DATETIME,'01/10/2014',103)AND CONVERT(DATETIME,'31/10/2015',103))Order BY CHECKS3.RANK

0

有很多方式做到這一點像在和相關子查詢

在:

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 

感覺自由如果你需要在這個項目

+0

感謝Pouria,但沒有任何消息一樣。我在我的問題中,您認爲AllTask​​No作爲ordere d字段。但事實並非如此。重要的字段是CheckQuosimaNo,它不能在sql語句中進行排序。 –