2
私は、再帰的な機能を持たないすべての孫会社を含む子会社からの経費をロールアップしようとしています。変更されたプレオーダーツリートランスバーサルチャイルドロールアップ
私のデータセットは、この形式のようになります。私がやりたいのは何
Parent A
- Child A.1 - $1,000
- Child A.2 - $2,000
- - Grandchild A.2.1 - $500
- - Grandchild A.2.2 - $750
- Child A.3 - $3,000
- Child A.4 - $4,000
Parent B
- Child B.1 - $11,000
- Child B.2 - $12,000
- - Grandchild B.2.1 - $1,500
- - Grandchild B.2.2 - $1,750
- Child B.3 - $13,000
- Child B.4 - $14,000
は、親Aの子で和であり、その結果は以下のような出力になります。
Child A.1 - $1,000
Child A.2 - $3,250
Child A.3 - $3,000
Child A.4 - $4,000
この私の会社テーブルの簡略化された構造です:
id
name
parent_id
lft
rght
これは私の支出テーブルの簡略化された構造です:
id
company_id
amount
date
私はそれぞれの子を一覧表示する方法を知っているとちょうど親Aのためのそれらの量:
Child A.1 - $1,000
Child A.2 - $2,000
Grandchild A.2.1 - $500
Grandchild A.2.2 - $750
Child A.3 - $3,000
Child A.4 - $4,000
そして、私はそれぞれの子のために合計する方法を知っている:出力だろう
SELECT
`Company`.`name` AS `name`,
SUM(`Spend`.`amount`) AS `amount`
FROM
`spend_table` AS `Spend`
INNER JOIN companies_table AS `Company` ON `Spend`.`company_id` = `Company`.`id`
INNER JOIN companies_table AS `thisCompany` ON `Company`.`lft` BETWEEN `thisCompany`.`lft` AND `thisCompany`.`rght`
WHERE
`thisCompany`.`name` = 'Parent A'
GROUP BY
`Company`.`name`
(親を除く):
SELECT
`Company`.`name` AS `name`,
SUM(`Spend`.`amount`) AS `amount`
FROM
`spend_visibility2` AS `SpendVisibility`
`spend_table` AS `Spend`
INNER JOIN companies_table AS `Company` ON `Spend`.`company_id` = `Company`.`id`
INNER JOIN companies_table AS `thisCompany` ON `Company`.`lft` BETWEEN `thisCompany`.`lft` AND `thisCompany`.`rght`
WHERE
`thisCompany`.`name` = 'Parent A'
`Company`.`parent_id` = `thisCompany`.`id`
GROUP BY
`Company`.`name`
出力する:
Child A.1 - $1,000
Child A.2 - $2,000
Child A.3 - $3,000
Child A.4 - $4,000
誰かが私を助けることができますか?私はサブセレクトが必要だと思っていますが、それを理解するのが難しいです。
完璧!ご協力いただきありがとうございます! – Andrew