MSSQL或MYSQL中的SQL Transact语句

时间:2014-11-04 11:41:26

标签: mysql sql-server

我有一个事务表,如下所示: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语句

1 个答案:

答案 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