我有一个事务表,如下所示:Tr_No是主键
Tr_No Tr_Date Tr_Remarks Tr_Amt
1 2014-05-05 Cash Deposited 1000
2 2014-05-06 Credit Card Withdrawal -250
3 2014-05-07 ATM Withdrawal -450
4 2014-05-08 Cash Deposited 1000
我需要一张表格如下:
Date Remarks Cash Deposited Cash Withdrawal Balance
2014-05-05 Cash Deposited 1000 1000
2014-05-06 Credit Card Withdrawal -250 750
2014-05-07 ATM Withdrawal -450 300
2014-05-08 Cash Deposited 1000 1300
我需要在MySQL或MSSQL中编写一个SQL查询来获取上表。请帮助我,因为我是SQL的新手。在存储过程中优先使用Select语句
答案 0 :(得分:0)
试试这个。这应该会给你一个想法。
CREATE TABLE #tt
(
Tr_No INT,
Tr_Date DATE,
Tr_Remarks VARCHAR(100),
Tr_Amt INT
)
INSERT INTO #tt
VALUES (1,'2014-05-05','Cash Deposited',1000),
(2,'2014-05-06','Credit Card Withdrawal',-250),
(3,'2014-05-07','ATM Withdrawal',-450),
(4,'2014-05-08','Cash Deposited',1000);
WITH cte
AS (SELECT *,
CASE WHEN Tr_Amt > 0 THEN CONVERT(VARCHAR(50), Tr_Amt) ELSE '' END [Cash Deposited],
CASE WHEN Tr_Amt < 0 THEN CONVERT(VARCHAR(50), Tr_Amt) ELSE '' END [Cash Withdrawal],
Tr_Amt Balance
FROM #tt)
SELECT Tr_Date,
Tr_Remarks,
[Cash Deposited],
[Cash Withdrawal],
(SELECT Sum(Balance) Balance
FROM cte a
WHERE a.Tr_Date <= b.Tr_Date) AS Balance
FROM cte b
<强>输出强>
Tr_Date Tr_Remarks Cash Deposited Cash Withdrawal Balance
---------- -------------- -------------- --------------- -------
2014-05-05 Cash Deposited 1000 1000
2014-05-06 Credit Card Withdrawal -250 750
2014-05-07 ATM Withdrawal -450 300
2014-05-08 Cash Deposited 1000 1300