You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL需求:按指定条件求和Retail列并输出指定格式结果

解决方案

1. 优化基础查询(输出指定格式)

你当前的SQL写法冗余,可简化为通过WHERE过滤条件后直接求和,同时输出Sales_Num、Week、Total_Retail三个字段,完全匹配你要的格式:

SELECT 
    Sales_Num,
    Week,
    SUM(Retail) AS Total_Retail
FROM YourTableName  -- 替换为你的数据表实际名称
WHERE 
    Product IN ('PLA', 'PLA2')
    AND Sales_Num = 45281
    AND Week = 38
GROUP BY Sales_Num, Week

2. 封装为带参数的函数

根据不同SQL方言,函数实现略有差异,以下提供两种常见场景的写法:

SQL Server 表值函数(推荐,直接返回完整结果集)

CREATE FUNCTION dbo.GetTotalRetail (@ProductList NVARCHAR(MAX), @TargetWeek INT, @TargetSalesNum INT)
RETURNS TABLE
AS
RETURN
(
    SELECT 
        @TargetSalesNum AS Sales_Num,
        @TargetWeek AS Week,
        SUM(Retail) AS Total_Retail
    FROM YourTableName
    WHERE 
        -- 拆分传入的产品列表字符串
        Product IN (SELECT value FROM STRING_SPLIT(@ProductList, ','))
        AND Sales_Num = @TargetSalesNum
        AND Week = @TargetWeek
    GROUP BY Sales_Num, Week
)

调用示例:

SELECT * FROM dbo.GetTotalRetail('PLA,PLA2', 38, 45281);

MySQL 自定义函数

DELIMITER //
CREATE FUNCTION GetTotalRetail(ProductList VARCHAR(255), TargetWeek INT, TargetSalesNum INT)
RETURNS DECIMAL(18,2)
DETERMINISTIC
BEGIN
    DECLARE Total DECIMAL(18,2);
    SELECT SUM(Retail) INTO Total
    FROM YourTableName
    WHERE 
        FIND_IN_SET(Product, ProductList)
        AND Sales_Num = TargetSalesNum
        AND Week = TargetWeek;
    RETURN Total;
END //
DELIMITER ;

调用示例:

SELECT 45281 AS Sales_Num, 38 AS Week, GetTotalRetail('PLA,PLA2', 38, 45281) AS Total_Retail;

3. 将结果写入另一表

不管用基础查询还是函数,都可以通过INSERT INTO语句把计算结果写入目标表:

用基础查询插入

INSERT INTO TargetTableName (Sales_Num, Week, Total_Retail)  -- 替换为你的目标表实际名称
SELECT 
    Sales_Num,
    Week,
    SUM(Retail) AS Total_Retail
FROM YourTableName
WHERE 
    Product IN ('PLA', 'PLA2')
    AND Sales_Num = 45281
    AND Week = 38
GROUP BY Sales_Num, Week;

用SQL Server函数插入

INSERT INTO TargetTableName (Sales_Num, Week, Total_Retail)
SELECT * FROM dbo.GetTotalRetail('PLA,PLA2', 38, 45281);

用MySQL函数插入

INSERT INTO TargetTableName (Sales_Num, Week, Total_Retail)
SELECT 45281, 38, GetTotalRetail('PLA,PLA2', 38, 45281);

内容的提问来源于stack exchange,提问作者Nigel214

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:36:14