我已经完成了MySQL简单查询,
SELECT
acc_trans.VoucherNumber,
acc_trans.EntryDate,
acc_trans.Debit,
acc_trans.Credit,
@Balance:= round(@Balance,2) + acc_trans.Debit - acc_trans.Credit AS Balance
FROM acc_trans, (SELECT @Balance := 0) AS variableInit Where AccountName='Cash Account'
ORDER BY acc_trans.TransactionID ASC
输出
VoucherNumber EntryDate Debit Credit Balance
-------------------------------------------------------------
1 2019-01-12 0.00 2500.00 -2500.00
2 2019-02-12 0.00 15000.00 -17500.00
3 2019-02-12 0.00 1500.00 -19000.00
1 2019-02-12 4800.00 0.00 -14200.00
此查询运行良好的MySQL数据库。我有与SQL Server相同的数据库。 如何在SQL Server中执行此查询?
答案 0 :(得分:1)
这需要工作
declare @Balance int=0;
SELECT
acc_trans.VoucherNumber,
acc_trans.EntryDate,
acc_trans.Debit,
acc_trans.Credit,
@Balance = round(@Balance,2) + acc_trans.Debit - acc_trans.Credit AS Balance
FROM acc_trans
Where AccountName='Cash Account'
ORDER BY acc_trans.TransactionID ASC
答案 1 :(得分:1)
从SQL Server 2008开始,您可以使用OVER子句:
输入:
CREATE TABLE acc_trans (
TransactionID int,
VoucherNumber int,
EntryDate date,
Debit numeric(20, 2),
Credit numeric(20, 2)
)
INSERT INTO acc_trans
(TransactionID, VoucherNumber, EntryDate, Debit, Credit)
VALUES
(1, 1, '2019-01-12', 0.00, 2500.00),
(2, 2, '2019-02-12', 0.00, 15000.00),
(3, 3, '2019-02-12', 0.00, 1500.00),
(4, 1, '2019-02-12', 4800.00, 0.00)
声明:
SELECT
acc_trans.VoucherNumber,
acc_trans.EntryDate,
acc_trans.Debit,
acc_trans.Credit,
[Balance] = SUM(acc_trans.Debit - acc_trans.Credit) OVER (ORDER BY acc_trans.TransactionID ASC)
FROM acc_trans
WHERE AccountName = 'Cash Account'
输出:
VoucherNumber EntryDate Debit Credit Balance
1 2019-01-12 0.00 2500.00 -2500.00
2 2019-02-12 0.00 15000.00 -17500.00
3 2019-02-12 0.00 1500.00 -19000.00
1 2019-02-12 4800.00 0.00 -14200.00
注意:
如果要使用SELECT语句为SQL Server中的变量分配值,则documentation中的注释很重要:
SELECT @local_variable通常用于将单个值返回到 变量。但是,当expression是列的名称时,它可以 返回多个值。如果SELECT语句返回多个 值,则为变量分配返回的最后一个值。
不能使用包含变量分配的SELECT语句 还可以执行典型的结果集检索操作。