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但有错误
列drug.name不允许
请帮我解决此错误。
答案 0 :(得分:0)
在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
等聚合函数。