You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

修改SQL存储过程:按ClusterName统计Payment_ID数量

修改存储过程实现按ClusterName分组统计Payment_ID数量

嘿,我帮你调整了这个存储过程,解决了原代码里的语法问题,同时实现了你要的按ClusterName分组统计符合条件的Payment_ID数量的需求。

原代码的问题说明

原存储过程里把关联条件t1.Payment_ID=t2.ClusterID直接写在Begin之后,这不符合SQL语法规范,而且没有实现分组统计的逻辑。下面是修正并优化后的版本:

修改后的存储过程代码

ALTER PROCEDURE [dbo].[JKLL_Get_information_clusterwise_firstlevel_JMSL]
AS
BEGIN
    -- 关闭计数消息,让输出更干净
    SET NOCOUNT ON;

    -- 使用INNER JOIN关联两张表,按ClusterName分组统计
    SELECT 
        t2.ClusterName,
        COUNT(t1.Payment_ID) AS Payment_Count -- 统计每组的Payment_ID数量
    FROM 
        JKLL_Payment_Upload t1
    INNER JOIN 
        Cluster t2 ON t1.Payment_ID = t2.ClusterID -- 正确的表关联方式
    WHERE 
        t1.Payment_Status = 1 
        AND t1.Reject_Status = 0 
        AND t1.First_Level_Approval_Status = 0
    GROUP BY 
        t2.ClusterName; -- 按ClusterName分组
END

代码关键点说明

  • 表关联优化:用INNER JOIN替代原有的逗号分隔表的写法,关联条件放在ON子句里,逻辑更清晰,也符合现代SQL的最佳实践。
  • 分组统计:通过GROUP BY t2.ClusterName将数据按集群名称分组,再用COUNT(t1.Payment_ID)统计每个分组下符合条件的支付记录ID数量,给统计列起了Payment_Count的别名,方便后续调用时识别。
  • 过滤条件保留:完全保留了你原有的过滤条件,只统计Payment_Status=1Reject_Status=0First_Level_Approval_Status=0的记录。
  • SET NOCOUNT ON:加入这个语句可以关闭存储过程执行时返回的“影响行数”消息,让输出结果更简洁。

这样修改后,当ClusterName为"Usa"时,就会返回对应的统计数量(比如你说的15),完全符合你的需求。

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

火山引擎 最新活动