在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。这很有效。我真的很感谢你的帮助。谢谢你在这上面花的时间。干杯,很乐意帮忙。如果它解决了你的问题,别忘了接受。