一、业务场景
客户需要统计每个会计科目金额,数据库表结构(有会计科目主表和会计科目明细表)
会计科目有无限层级,但是只有最下一级会计科目记录金额,现在需要把每一级的金额统计出来
二、实现思路
最开始想着把当前科目的所有子级,孙级查询出来,就开始按这个思路去网上搜索,查到用函数去获取
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就行了