2 개의 테이블이 있고 페이지 매김 (제한 및 오프셋)을 사용하여 필터를 만들어야합니다.
한 파트너는 많은 자녀와 많은 계정 송장을 가질 수 있습니다.
일정 기간 동안 모든 고객과 그와 그 자녀와 관련된 총 송장 (과세되지 않은 총계)을 가져와야합니다. 예:
res_partner
id --- name --- parent_id
1 --- Jon
2 --- Snow ---- 1
3 --- Sam ----- 2
account_invoice
id --- amount_untaxed --- partner_id --- created_date
1 ------------------ 5.00 ---------1--------------'2015-09-29 21:37:39.427189'
2 ------------------ 7.00 ---------2--------------'2015-09-29 21:37:39.427189'
3 ------------------ 3.00 ---------3--------------'2015-09-29 21:37:39.427189'
4 ------------------ 9.00 ---------1--------------'2015-09-29 21:37:39.427189'
나는 희망한다 :
res_partner --- amount
1 -----------------24
2 -----------------10
3 -----------------3
재귀 저장 프로 시저를 사용하여 각 레코드의 값을 계산할 수 있습니다.
CREATE OR REPLACE FUNCTION fnTree(pid int) RETURNS numeric AS $$ DECLARE total numeric; BEGIN WITH RECURSIVE tree(id, parent_id) AS ( SELECT id, parent_id FROM res_partner WHERE id = pid UNION ALL SELECT rp.id, rp.parent_id FROM res_partner rp JOIN tree ON rp.parent_id = tree.id ) SELECT sum(amount_untaxed) into total FROM account_invoice ai WHERE partner_id in (SELECT id FROM tree); RETURN total; END; $$ LANGUAGE plpgsql;
✓
select id, fnTree(id) from res_partner;
아이디 | fntree- : | ----- : 1 | 24.00 2 | 10.00 3 | 3.00
여기 dbfiddle
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다