在SQL中,如何根据另一列中的字符串值对一列中的数值求和
我希望我的过程通过在SQL中,如何根据另一列中的字符串值对一列中的数值求和,sql,Sql,我希望我的过程通过PlantName返回AcceptedProducts的总数 有人能帮我纠正一下程序吗 CREATE PROCEDURE spAcceptedByCountry @Year INT, @Month INT AS SELECT CountryCode, CountryName, REPLACE(SUBSTRING([PlantName], CHARINDEX('-', [PlantName]), L
PlantName
返回AcceptedProducts
的总数
有人能帮我纠正一下程序吗
CREATE PROCEDURE spAcceptedByCountry @Year INT, @Month INT
AS
SELECT CountryCode,
CountryName,
REPLACE(SUBSTRING([PlantName], CHARINDEX('-', [PlantName]), LEN([PlantName])), '-', '') AS [PlantName],
SUM(AcceptedProducts) AS AcceptedProducts
FROM vAcceptedByCountry
WHERE YEAR(DateOfManufacture) = @Year AND MONTH(DateOfManufacture) = @Month
GROUP BY CountryCode,
CountryName,
PlantName,
AcceptedProducts
ORDER BY CountryCode;
GO
谢谢你的帮助。
亲切问候。试试这个:
CREATE PROCEDURE spAcceptedByCountry @Year INT, @Month INT
AS
SELECT CountryCode,
CountryName,
REPLACE(SUBSTRING([PlantName], CHARINDEX('-', [PlantName]), LEN([PlantName])), '-', '') AS [PlantName],
SUM(AcceptedProducts) AS AcceptedProducts
FROM vAcceptedByCountry
WHERE YEAR(DateOfManufacture) = @Year AND MONTH(DateOfManufacture) = @Month
GROUP BY 1, 2, 3
ORDER BY CountryCode;
GO
您不希望按要计算的聚合进行分组
因此,现在您正在计算每个countrycode/countryname/plantname接受的产品,其中工厂名称不是列,而是select子句中的项。从GROUP BY子句中删除AcceptedProducts,并将plantname替换为replace(子字符串([plantname]、CHARINDEX('-',[plantname])、LEN([plantname])、'-','')这个问题毫无意义。问题没有提到年份和月份,它们是存储过程的重要参数。事实上,存储过程对此甚至没有意义。用户定义的函数更合适。非常感谢Athanasios。这很有效。我真的很感谢你的帮助。谢谢你在这上面花的时间。干杯,很乐意帮忙。如果它解决了你的问题,别忘了接受。