簡體   English   中英

MsSQL 貸記、借記和余額

[英]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.

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