【问题标题】:Conver MySQL procedure in MSSQL在 MSSQL 中转换 MySQL 过程
【发布时间】:2017-05-07 15:36:15
【问题描述】:
DROP PROCEDURE IF EXISTS amount_in_stock;
CREATE PROCEDURE amount_in_stock( @id INT)
AS
BEGIN
SET NOCOUNT ON;
  SELECT drugs.name, SUM(arrivals.amount) AS Amount_arived, SUM(realization.amount) AS Amount_realized, SUM(arrivals.amount) - SUM(realization.amount) AS amount_in_stock
  FROM drugs
  JOIN arrivals ON drugs.id_drug = arrivals.id_drug
  JOIN realization ON drugs.id_drug = realization.id_drug
  WHERE drugs.id_drug = @id;
END; 
 GO

我将mysql代码转换为mssql但有错误

列drugs.name 不允许

请帮我解决这个错误。

【问题讨论】:

  • 这在我看来不像是 MySQL 程序。

标签: mysql sql-server


【解决方案1】:

在 WHERE 子句后添加Group by drugs.name

所以你的程序将是

DROP PROCEDURE IF EXISTS amount_in_stock;
CREATE PROCEDURE amount_in_stock( @id INT)
AS
BEGIN
SET NOCOUNT ON;
  SELECT drugs.name, SUM(arrivals.amount) AS Amount_arived, SUM(realization.amount) AS Amount_realized, SUM(arrivals.amount) - SUM(realization.amount) AS amount_in_stock
  FROM drugs
  JOIN arrivals ON drugs.id_drug = arrivals.id_drug
  JOIN realization ON drugs.id_drug = realization.id_drug
  WHERE drugs.id_drug = @id
  GROUP BY drugs.name
  ;
END; 
 GO

您不能使用不在GROUP BY 中或不在聚合函数中的列,并且不能与SUM, AVG, MAX 等聚合函数一起使用不是常量的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2016-10-23
    • 2015-07-25
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多