将 MySQL 简单查询转换为 SQL Server
Posted
技术标签:
【中文标题】将 MySQL 简单查询转换为 SQL Server【英文标题】:Converting MySQL Simple Query to SQL Server 【发布时间】:2019-03-11 07:07:57 【问题描述】:我已经完成了 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 中执行此查询?
【问题讨论】:
SQL 不是数据库是指 sql server 吗? @ZaynulAbadinTuhin 嗯,我错了 【参考方案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 通常用于将单个值返回到 变量。但是,当表达式是列名时,它可以 返回多个值。如果 SELECT 语句返回多个 值,变量被分配最后一个返回的值。
不能使用包含变量赋值的 SELECT 语句 还可以执行典型的结果集检索操作。
【讨论】:
【参考方案2】:这需要工作
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
【讨论】:
以上是关于将 MySQL 简单查询转换为 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MySQL 查询转换为等效的 Oracle sql 查询
使用函数 SUM() 和 Group by 将 Mysql 查询转换为 SQL 查询
如何将 SQL 查询从 MySQL 8 转换为 MySQL 5.7