将MySQL简单查询转换为SQL Server

时间:2019-03-11 07:07:58

标签: mysql sql sql-server

我已经完成了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中执行此查询?

2 个答案:

答案 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语句   还可以执行典型的结果集检索操作。