[英]MsSQL Credit, Debit and Balance
我有一張如下表。
Name| Date | Debit | Credit
-------------------------------------------
A | 02.02.2020 | 10,00 | 0,00
A | 03.02.2020 | 20,00 | 0,00
A | 04.02.2020 | 0,00 | 30,00
A | 05.02.2020 | 20,00 | 0,00
A | 06.02.2020 | 40,00 | 0,00
A | 07.02.2020 | 50,00 | 0,00
A | 08.02.2020 | 15,00 | 0,00
A | 09.02.2020 | 20,00 | 0,00
A | 10.02.2020 | 10,00 | 0,00
A | 11.02.2020 | 20,00 | 0,00
A | 12.02.2020 | 0,00 | 50,00
A | 13.02.2020 | 0,00 | 60,00
A | 14.02.2020 | 20,00 | 15,00
B | 20.01.2020 | 10,00 | 0,00
B | 21.01.2020 | 20,00 | 0,00
B | 22.01.2020 | 40,00 | 0,00
B | 23.01.2020 | 0,00 | 100,00
B | 24.01.2020 | 20,00 | 0,00
B | 25.01.2020 | 10,00 | 0,00
B | 26.01.2020 | 0,00 | 10,00
B | 27.01.2020 | 10,00 | 0,00
我想用這個表創建一個“視圖”。 首先,所有“學分”將根據“名稱”相互添加。 然后,從總“貸方”中減去“借方”。 此處獲得的值將在第一個日期寫入“余額”列。 然后從這里,“借方”列上的值將按順序減去並寫入今天日期的“余額”列。
我想要獲得的“視圖”如下圖所示。
Name| Date | Debit | Credit | Balance | Credit Total
-------------------------------------------------------------------------
A | 02.02.2020 | 10,00 | 0,00 | 145,00 | 155,00
A | 03.02.2020 | 20,00 | 0,00 | 125,00 |
A | 04.02.2020 | 0,00 | 30,00 | 125,00 |
A | 05.02.2020 | 20,00 | 0,00 | 105,00 |
A | 06.02.2020 | 40,00 | 0,00 | 65,00 |
A | 07.02.2020 | 50,00 | 0,00 | 15,00 |
A | 08.02.2020 | 15,00 | 0,00 | 0,00 |
A | 09.02.2020 | 20,00 | 0,00 | -20,00 |
A | 10.02.2020 | 10,00 | 0,00 | -30,00 |
A | 11.02.2020 | 20,00 | 0,00 | -50,00 |
A | 12.02.2020 | 0,00 | 50,00 | -50,00 |
A | 13.02.2020 | 0,00 | 60,00 | -50,00 |
A | 14.02.2020 | 20,00 | 15,00 | -70,00 |
B | 20.01.2020 | 10,00 | 0,00 | 100,00 | 110,00
B | 21.01.2020 | 20,00 | 0,00 | 80,00 |
B | 22.01.2020 | 40,00 | 0,00 | 40,00 |
B | 23.01.2020 | 0,00 | 100,00 | 40,00 |
B | 24.01.2020 | 20,00 | 0,00 | 20,00 |
B | 25.01.2020 | 10,00 | 0,00 | 10,00 |
B | 26.01.2020 | 0,00 | 10,00 | 10,00 |
B | 27.01.2020 | 10,00 | 0,00 | 0,00 |
我可以在“mvc”中執行以下操作:
var creditTotal = Model.Sum(x => x.Credit);
foreach (var item in Model.OrderBy(x => x.Date))
{
<tr>
<td>@item.Name</td>
<td>@item.Date</td>
<td>@item.Debit</td>
<td>@item.Credit</td>
<td>@creditTotal - item.Debit</td>
</tr>
creditTotal = creditTotal - item.Debit;
}
但是如果能在SQL視圖中做到就更好了。 在 sql 視圖中有什么方法可以做到這一點?
您可以使用 window 函數:
select t.*,
(sum(credit) over (partition by name) -
sum(debit) over (partition by name order by date)
) as balance,
(case when row_number() over (partition by name order by date) = 1
then sum(credit) over (partition by name)
end) as credit_total
from t
謝謝,但這返回了一個錯誤:'order' 附近的語法不正確。
並且當我刪除“按日期排序”時,它會在所有列中寫入總余額,如下所示。
Name| Date | Debit | Credit | Balance | Credit Total
-------------------------------------------------------------------------
A | 02.02.2020 | 10,00 | 0,00 | -70,00 | 155,00
A | 03.02.2020 | 20,00 | 0,00 | -70,00 |
A | 04.02.2020 | 0,00 | 30,00 | -70,00 |
A | 05.02.2020 | 20,00 | 0,00 | -70,00 |
A | 06.02.2020 | 40,00 | 0,00 | -70,00 |
A | 07.02.2020 | 50,00 | 0,00 | -70,00 |
A | 08.02.2020 | 15,00 | 0,00 | -70,00 |
A | 09.02.2020 | 20,00 | 0,00 | -70,00 |
A | 10.02.2020 | 10,00 | 0,00 | -70,00 |
A | 11.02.2020 | 20,00 | 0,00 | -70,00 |
A | 12.02.2020 | 0,00 | 50,00 | -70,00 |
A | 13.02.2020 | 0,00 | 60,00 | -70,00 |
A | 14.02.2020 | 20,00 | 15,00 | -70,00 |
每一行都需要以不同的方式計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.