sql - 在 SQL 中,如何根据另一列中的字符串值对一列中的数值求和
问题描述
我希望我的程序返回AcceptedProducts
by的总数PlantName
。
有人可以帮我纠正我的程序吗?
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
您不想按您尝试计算的聚合进行分组。
因此,现在您正在计算每个国家/地区代码/国家/地区名称/植物名称的可接受产品,其中植物名称不是列,而是选择子句中的项目。
推荐阅读
- python - 使用滞后的机器学习预测客户流失
- java - 使用 JUnit 5 的 @ParametrizedTest 而不是 @TestFactory Stream 有什么区别/优势
? - css - 如何推迟非批判性风格?
- sql - 使用 Amazon-redshift 提取括号中的数据
- laravel - 仅在刀片中显示特定条件的数据
- automation - 如何使用 Robot Framework 在浏览器的弹出窗口中输入文本
- regex - SED:从 httpd-vhosts.conf 中删除虚拟主机
- angular - Angular 2+ 中是否有 onRightMouseDown 和 Up Hostlistener
- python - 重新排列文本块,使每个块都以完整的句子结尾
- oracle - 如何使 dbms_scheduler.create_job 可配置?