How about:
WITH cteSource As
(
SELECT
0 As No,
Name,
Money
FROM
TableOne
UNION ALL
SELECT
No,
Name,
Money
FROM
TableTwo As T2
WHERE
Exists
(
SELECT 1
FROM TableOne As T1
WHERE T1.Name = T2.Name
)
)
SELECT
No,
Name,
Money,
SUM(Money) OVER (PARTITION BY Name ORDER BY No ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) As TotalMoney
FROM
cteSource
;
Output:
| No | Name | Money | TotalMoney |
|----|--------|--------|------------|
| 0 | Khalid | 5000 | 5000 |
| 1 | Khalid | 4000 | 9000 |
| 3 | Khalid | 10000 | 19000 |
| 4 | Khalid | 10000 | 29000 |
OVER Clause (Transact-SQL) - SQL Server | Microsoft Docs[
^]