簡體   English   中英

如何使這個查詢遞歸Sql Server?

[英]How can I make this query recursive Sql Server?

我有Balances表的這個表結構:

在此輸入圖像描述

這就是觀點:

在此輸入圖像描述

我對Amounts表也有這個結構:

在此輸入圖像描述

這是Amounts表的視圖模式:

在此輸入圖像描述

首先,我需要在Amounts表中獲取特定日期的金額值:

在此輸入圖像描述

有了這個查詢,我在2016年7月7日獲得了300金額。 一旦達到這個數字,我需要使用Balances表進行遞歸查詢。 最終結果應該是這樣的:

    Name   abstractAmount   addAmount  Balance
   -----   --------------   ---------  -------
   Josep                      100        400       
   Maria       50                        350
   George                     60         410
   Julianne    25                        385

這是什么? 這個結果是從Amounts表中取300來實現的,而對於Balance表中的每一行,我看到:如果第一行中的abstracAmount不為空,我進行這個數學計算:balance =(300 - abstractAmount),萬一是empty和addAmount列有值我做這個數學計算balance =(300 + addAmount)在其余的行中我做同樣但計算不在300上,在最后一行上是平衡:例如:在第一行余額為400,因為addamount有值,所以我進行此計算:300 + 100 = 400在第二行中,余額為350,因為abstractAmount不為空,所以我取最后一行的余額值進行此計算:400 - 50 = 350.對於其余行,同樣的事情,只有第一行采用金額表的余額值。

筆記:
1.始終列abstractAmount減去值以及addAmount列的總和值。

  1. 始終其中一列(abstractAmount | addAmount)將為空。

  2. 只有第一行獲取值才能對Amounts表進行數學計算,其余行將獲取之前行的值。

我怎樣才能得到這個最終結果?

       Name     abstractAmount  addAmount   Balance
       -----   --------------   ---------  -------
       Josep                      100        400       
       Maria       50                        350
       George                     60         410
       Julianne    25                        385

我接受建議,謝謝。

您可以使用窗口函數代替遞歸。 更具體地說,在獲得運行總計(+開始余額) rows unbounded preceding的總和:

select *,300 +  sum(isnull(addAmount,0) - ISNULL(abstractAmount,0))  over (order by id rows unbounded preceding) Balance 
from Balances

isnull(addAmount,0) - ISNULL(abstractAmount,0)只是每一行的變異。 over (order by id rows unbounded preceding)將和的范圍限定為當前行和所有前面的行。

要從金額表中獲取基數,您可以簡單地將(選擇... where date ..)作為值而不是“300”或更加漂亮:使用金額表的交叉連接:

select b.*, a.dateInsertion,a.amount, a.amount +  sum(isnull(addAmount,0) - ISNULL(abstractAmount,0))  over (order by b.id rows unbounded preceding) Balance 
from Balances b
cross join Amounts a
where a.dateInsertion = '20160707'

如果沒有where的交叉連接,您將獲得所有可能的余額

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM