MySql中FIND_IN_SET用于统计财务会计科目金额

一、业务场景

客户需要统计每个会计科目金额,数据库表结构(有会计科目主表和会计科目明细表)

会计科目有无限层级,但是只有最下一级会计科目记录金额,现在需要把每一级的金额统计出来

二、实现思路

最开始想着把当前科目的所有子级,孙级查询出来,就开始按这个思路去网上搜索,查到用函数去获取

BEGIN
  DECLARE sTemp VARCHAR(1000);
    DECLARE sTempChd VARCHAR(1000); 
    DECLARE fidAmount DECIMAL(8,2);

  SET sTemp = '0';
    SET sTempChd = cast(rootId as CHAR); 
    SET fidAmount = 0;

  WHILE sTempChd is not null DO 
        SET sTemp = concat(sTemp,',',sTempChd); 
        SELECT group_concat(id) INTO sTempChd FROM finance_item where FIND_IN_SET(pid,sTempChd)>0; 
    END WHILE;


RETURN sTemp ; 
END

然后就想着这里都把子级和孙级查出来了,就在这里随便去关联查询金额

BEGIN
  DECLARE sTemp VARCHAR(1000);
    DECLARE sTempChd VARCHAR(1000); 
    DECLARE fidAmount DECIMAL(8,2);

  SET sTemp = '0';
    SET sTempChd = cast(rootId as CHAR); 
    SET fidAmount = 0;

  WHILE sTempChd is not null DO 
        SET sTemp = concat(sTemp,',',sTempChd); 
        SELECT group_concat(id) INTO sTempChd FROM finance_item where FIND_IN_SET(pid,sTempChd)>0; 
    END WHILE;

    SELECT sum(amount) INTO fidAmount FROM finance_item_detail where item_id<>0 and IN(item_id,sTemp); 
    
RETURN fidAmount; 
END

但是报错,找不到原因,就在这时我突然发现(FIND_IN_SET)这个函数没有用过,就去百度了一下,了解把IN换成FIND_IN_SET就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值