微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在特定条件下具有 CTE 和 GROUP BY 和 WITH ROLLUP 的邻接列表模型

如何解决在特定条件下具有 CTE 和 GROUP BY 和 WITH ROLLUP 的邻接列表模型

我有一个分层的表。我使用邻接列表表示它。

以下是我使用的查询语句:

WITH RECURSIVE account_path (root,id,parent_id,name,lvl,`sort`,account_roll_up_id) AS(
   SELECT name AS root,`name`,0 lvl,account_roll_up_id
   FROM account_type
   WHERE id IN (30,213)
   UNION ALL
   SELECT cp.root AS root,c.id,c.parent_id,c.name,(cp.lvl + 1),c.sort,c.account_roll_up_id
   FROM account_path AS cp
            JOIN account_type AS c ON cp.id = c.parent_id
)

SELECT MAX(sort)                                                           AS `sort`,MIN(root)                                                           AS root,MIN(parent_id)                                                      AS parent_id,MIN(id)                                                             AS id,MIN(account_roll_up_id)                                             AS roll_id,MIN(lvl)                                                            AS lvl,GROUPING(base.account_roll_up_id,base.id) AS 'grouping_both',IF( GROUPING (base.account_roll_up_id,base.id),CONCAT(REPEAT("     ",MIN(lvl)),"=> TOTAL ",UPPER(GROUP_CONCAT(disTINCT account_roll_up_name)),""),GROUP_CONCAT(disTINCT account_name ORDER BY account_roll_up_name)) AS 'rollup_name',SUM(IF(location_id = 1,ending_balance,0))                         as 'TMS JKT'

FROM (
         SELECT ap.id                                                             AS id,MIN(ap.parent_id)                                                 AS parent_id,coa.location_id,ap.sort,MIN(ap.root)                                                      AS root,GROUP_CONCAT(disTINCT location_name)                              AS location_name,GROUP_CONCAT(disTINCT CONCAT(REPEAT("     ",ap.lvl),ap.`name`)) AS account_name,COALESCE(
                 IF(SUM(coa.debit) > SUM(coa.credit),SUM(coa.debit) - SUM(coa.credit),SUM(coa.credit) - SUM(coa.debit)),0)                                                               AS ending_balance,MIN(account_roll_up_id)                                           AS account_roll_up_id,GROUP_CONCAT(disTINCT aru.name)                                   as account_roll_up_name
         FROM account_path ap
                  LEFT JOIN (
             SELECT chart_of_account_id,chart_of_account.name,chart_of_account.location_id,chart_of_account.account_type_id,l.name as location_name,jd.debit,jd.credit,journal.date
             FROM chart_of_account
                      LEFT JOIN journal_detail jd on chart_of_account.id = jd.chart_of_account_id
                      LEFT JOIN journal ON jd.journal_id = journal.id
                      LEFT JOIN location l on chart_of_account.location_id = l.id

             WHERE chart_of_account.header_or_detail = 1
               AND MONTH(journal.date) = 4
               AND YEAR(journal.date) = 2021
         ) AS coa ON coa.account_type_id = ap.id
                  LEFT JOIN account_roll_up AS aru ON aru.id = ap.account_roll_up_id

         GROUP BY ap.id,ap.lvl
         ORDER BY ap.`sort`,ap.lvl,location_id
     ) AS base

GROUP BY base.account_roll_up_id,base.id
WITH ROLLUP
HAVING rollup_name IS NOT NULL
ORDER BY MAX(base.sort),GROUPING (base.account_roll_up_id,base.id);
+------+----------------+-----------+------+---------+------+--------------------+-------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+--------------+
| sort | root           | parent_id | id   | roll_id | lvl  | grouping_rollup_id | grouping_id | grouping_both | rollup_name                                                                                                                                        | TMS JKT      |
+------+----------------+-----------+------+---------+------+--------------------+-------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+--------------+
|    1 | AKTIVA         |      NULL |   30 |    NULL |    0 |                  0 |           0 |             0 | AKTIVA                                                                                                                                             |         0.00 |
|    2 | AKTIVA         |        30 |   40 |       2 |    1 |                  0 |           0 |             0 |      Aktiva Lancar                                                                                                                                 |         0.00 |
|    3 | AKTIVA         |        40 |   41 |       2 |    2 |                  0 |           0 |             0 |           Kas & Bank                                                                                                                               |         0.00 |
|    4 | AKTIVA         |        41 |   42 |       2 |    3 |                  0 |           0 |             0 |                Kas                                                                                                                                 |   3725000.00 |
|    6 | AKTIVA         |        41 |   44 |       2 |    3 |                  0 |           0 |             0 |                Kas Tunai Di Brankas                                                                                                                |  25000000.00 |
|    7 | AKTIVA         |        41 |   46 |       2 |    3 |                  0 |           0 |             0 |                Bank                                                                                                                                | 107350000.00 |
|    8 | AKTIVA         |        40 |   47 |       2 |    2 |                  0 |           0 |             0 |           Piutang                                                                                                                                  |         0.00 |
|    9 | AKTIVA         |        47 |   56 |       2 |    3 |                  0 |           0 |             0 |                Piutang Penjualan                                                                                                                   |         0.00 |
|   10 | AKTIVA         |        47 |   57 |       2 |    3 |                  0 |           0 |             0 |                Piutang Principal                                                                                                                   |         0.00 |
|   23 | AKTIVA         |        40 |   48 |       2 |    2 |                  0 |           0 |             0 |           Biaya Dibayar Di Muka                                                                                                                    |         0.00 |
|   24 | AKTIVA         |        48 |   73 |       2 |    3 |                  0 |           0 |             0 |                Pajak Dibayar Di Muka                                                                                                               |         0.00 |
|   25 | AKTIVA         |        48 |   70 |       2 |    3 |                  0 |           0 |             0 |                Asuransi Dibayar Di Muka                                                                                                            |         0.00 |
|   28 | AKTIVA         |        30 |   40 |       2 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA LANCAR                                                                                                                        | 136075000.00 |
|   29 | AKTIVA         |        30 |   49 |       3 |    1 |                  0 |           0 |             0 |      Investasi Jangka Panjang                                                                                                                      |         0.00 |
|   30 | AKTIVA         |        49 |  212 |       3 |    2 |                  0 |           0 |             0 |           Saham                                                                                                                                    |         0.00 |
|   30 | AKTIVA         |        30 |   49 |       3 |    1 |                  0 |           1 |             1 |      => TOTAL INVESTASI JANGKA PANJANG                                                                                                             |         0.00 |
|   31 | AKTIVA         |        30 |   50 |       4 |    1 |                  0 |           0 |             0 |      Aktiva Tetap                                                                                                                                  |         0.00 |
|   32 | AKTIVA         |        50 |   76 |       4 |    2 |                  0 |           0 |             0 |           Tanah                                                                                                                                    | 120000000.00 |
|   33 | AKTIVA         |        50 |   77 |       4 |    2 |                  0 |           0 |             0 |           Gedung & Bangunan                                                                                                                        |         0.00 |
|   50 | AKTIVA         |        30 |   50 |       4 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA TETAP                                                                                                                         | 120000000.00 |
|   51 | AKTIVA         |        30 |   51 |       5 |    1 |                  0 |           0 |             0 |      Aktiva Tidak Berwujud                                                                                                                         |         0.00 |
|   52 | AKTIVA         |        51 |   85 |       5 |    2 |                  0 |           0 |             0 |           Biaya Pra Operasional                                                                                                                    |         0.00 |
|   53 | AKTIVA         |        51 |   86 |       5 |    2 |                  0 |           0 |             0 |           Akumulasi Depresiasi Aktiva Tidak Berwujud                                                                                               |         0.00 |
|   53 | AKTIVA         |        30 |   51 |       5 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA TIDAK BERWUJUD                                                                                                                |         0.00 |
|   54 | AKTIVA         |        30 |   52 |       6 |    1 |                  0 |           0 |             0 |      Aktiva Lainnya                                                                                                                                |         0.00 |
|   55 | AKTIVA         |        52 |   75 |       6 |    2 |                  0 |           0 |             0 |           Deposito / Jaminan                                                                                                                       |         0.00 |
|   55 | AKTIVA         |        30 |   52 |       6 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA LAINNYA                                                                                                                       |         0.00 |
|   56 | HUTANG & MODAL |      NULL |  213 |    NULL |    0 |                  0 |           0 |             0 | HUTANG & MODAL                                                                                                                                     |         0.00 |
|   57 | HUTANG & MODAL |       213 |   88 |    NULL |    1 |                  0 |           0 |             0 |      Hutang                                                                                                                                        |         0.00 |
|   58 | HUTANG & MODAL |        88 |   89 |       9 |    2 |                  0 |           0 |             0 |           Hutang Jangka Pendek                                                                                                                     |         0.00 |
|   59 | HUTANG & MODAL |        89 |  106 |       9 |    3 |                  0 |           0 |             0 |                Hutang Dagang Lainnya                                                                                                               |         0.00 |
|   60 | HUTANG & MODAL |        89 |   93 |       9 |    3 |                  0 |           0 |             0 |                Hutang SDL                                                                                                                          |         0.00 |
|   71 | HUTANG & MODAL |        88 |   89 |       9 |    2 |                  0 |           1 |             1 |           => TOTAL HUTANG JANGKA PENDEK                                                                                                            |         0.00 |
|   72 | HUTANG & MODAL |        88 |   90 |      10 |    2 |                  0 |           0 |             0 |           Hutang Jangka Panjang                                                                                                                    |         0.00 |
|   73 | HUTANG & MODAL |        90 |  105 |      10 |    3 |                  0 |           0 |             0 |                Hutang Bank                                                                                                                         |         0.00 |
|   73 | HUTANG & MODAL |        88 |   90 |      10 |    2 |                  0 |           1 |             1 |           => TOTAL HUTANG JANGKA PANJANG                                                                                                           |         0.00 |
|   74 | HUTANG & MODAL |       213 |   91 |    NULL |    1 |                  0 |           0 |             0 |      Modal                                                                                                                                         |         0.00 |
|   75 | HUTANG & MODAL |        91 |  107 |      11 |    2 |                  0 |           0 |             0 |           Modal Saham                                                                                                                              | 500000000.00 |
|   77 | HUTANG & MODAL |        91 |  107 |      11 |    2 |                  0 |           1 |             1 |           => TOTAL MODAL                                                                                                                           | 500000000.00 |
|   77 | AKTIVA         |        30 |   30 |       2 |    0 |                  1 |           1 |             3 | => TOTAL AKTIVA LAINNYA,AKTIVA LANCAR,AKTIVA TETAP,AKTIVA TIDAK BERWUJUD,HUTANG JANGKA PANJANG,HUTANG JANGKA PENDEK,INVESTASI JANGKA PANJANG,MODAL | 756075000.00 |
+------+----------------+-----------+------+---------+------+--------------------+-------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+--------------+

请关注查询结果表。如果仔细观察,您会发现有两个词根(AKTIVA、HUTANG 和 MODAL)。

我想汇总这两个数据。

这样我们最终得到的数据如下。

+------+----------------------+-----------+------+---------+------+--------------------+-------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+--------------+
| sort | root                 | parent_id | id   | roll_id | lvl  | grouping_rollup_id | grouping_id | grouping_both | rollup_name                                                                                                                                        | TMS JKT      |
+------+----------------------+-----------+------+---------+------+--------------------+-------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+--------------+
|    1 | AKTIVA               |      NULL |   30 |    NULL |    0 |                  0 |           0 |             0 | AKTIVA                                                                                                                                             |         0.00 |
|    2 | AKTIVA               |        30 |   40 |       2 |    1 |                  0 |           0 |             0 |      Aktiva Lancar                                                                                                                                 |         0.00 |
|    3 | AKTIVA               |        40 |   41 |       2 |    2 |                  0 |           0 |             0 |           Kas & Bank                                                                                                                               |         0.00 |
|    4 | AKTIVA               |        41 |   42 |       2 |    3 |                  0 |           0 |             0 |                Kas                                                                                                                                 |   3725000.00 |
|    6 | AKTIVA               |        41 |   44 |       2 |    3 |                  0 |           0 |             0 |                Kas Tunai Di Brankas                                                                                                                |  25000000.00 |
|    7 | AKTIVA               |        41 |   46 |       2 |    3 |                  0 |           0 |             0 |                Bank                                                                                                                                | 107350000.00 |
|    8 | AKTIVA               |        40 |   47 |       2 |    2 |                  0 |           0 |             0 |           Piutang                                                                                                                                  |         0.00 |
|    9 | AKTIVA               |        47 |   56 |       2 |    3 |                  0 |           0 |             0 |                Piutang Penjualan                                                                                                                   |         0.00 |
|   10 | AKTIVA               |        47 |   57 |       2 |    3 |                  0 |           0 |             0 |                Piutang Principal                                                                                                                   |         0.00 |
|   23 | AKTIVA               |        40 |   48 |       2 |    2 |                  0 |           0 |             0 |           Biaya Dibayar Di Muka                                                                                                                    |         0.00 |
|   24 | AKTIVA               |        48 |   73 |       2 |    3 |                  0 |           0 |             0 |                Pajak Dibayar Di Muka                                                                                                               |         0.00 |
|   25 | AKTIVA               |        48 |   70 |       2 |    3 |                  0 |           0 |             0 |                Asuransi Dibayar Di Muka                                                                                                            |         0.00 |
|   28 | AKTIVA               |        30 |   40 |       2 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA LANCAR                                                                                                                        | 136075000.00 |
|   29 | AKTIVA               |        30 |   49 |       3 |    1 |                  0 |           0 |             0 |      Investasi Jangka Panjang                                                                                                                      |         0.00 |
|   30 | AKTIVA               |        49 |  212 |       3 |    2 |                  0 |           0 |             0 |           Saham                                                                                                                                    |         0.00 |
|   30 | AKTIVA               |        30 |   49 |       3 |    1 |                  0 |           1 |             1 |      => TOTAL INVESTASI JANGKA PANJANG                                                                                                             |         0.00 |
|   31 | AKTIVA               |        30 |   50 |       4 |    1 |                  0 |           0 |             0 |      Aktiva Tetap                                                                                                                                  |         0.00 |
|   32 | AKTIVA               |        50 |   76 |       4 |    2 |                  0 |           0 |             0 |           Tanah                                                                                                                                    | 120000000.00 |
|   33 | AKTIVA               |        50 |   77 |       4 |    2 |                  0 |           0 |             0 |           Gedung & Bangunan                                                                                                                        |         0.00 |
|   50 | AKTIVA               |        30 |   50 |       4 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA TETAP                                                                                                                         | 120000000.00 |
|   51 | AKTIVA               |        30 |   51 |       5 |    1 |                  0 |           0 |             0 |      Aktiva Tidak Berwujud                                                                                                                         |         0.00 |
|   52 | AKTIVA               |        51 |   85 |       5 |    2 |                  0 |           0 |             0 |           Biaya Pra Operasional                                                                                                                    |         0.00 |
|   53 | AKTIVA               |        51 |   86 |       5 |    2 |                  0 |           0 |             0 |           Akumulasi Depresiasi Aktiva Tidak Berwujud                                                                                               |         0.00 |
|   53 | AKTIVA               |        30 |   51 |       5 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA TIDAK BERWUJUD                                                                                                                |         0.00 |
|   54 | AKTIVA               |        30 |   52 |       6 |    1 |                  0 |           0 |             0 |      Aktiva Lainnya                                                                                                                                |         0.00 |
|   55 | AKTIVA               |        52 |   75 |       6 |    2 |                  0 |           0 |             0 |           Deposito / Jaminan                                                                                                                       |         0.00 |
|   55 | AKTIVA               |        30 |   52 |       6 |    1 |                  0 |           1 |             1 |      => TOTAL AKTIVA LAINNYA                                                                                                                       |         0.00 |
|      | TOTAL AKTIVA         |           |      |         |      |                    |             |               | TOTAL AKTIVA LANCAR + TOTAL AKTIVA LAINNYA + TOTAL INVESTASI JANGKA PANJANG + TOTAL AKTIVA TETAP + TOTAL AKTIVA TIDAK BERWUJUD+TOTAL AKTIVA LAINNYA| 256075000.00 |
|   56 | HUTANG & MODAL       |      NULL |  213 |    NULL |    0 |                  0 |           0 |             0 | HUTANG & MODAL                                                                                                                                     |         0.00 |
|   57 | HUTANG & MODAL       |       213 |   88 |    NULL |    1 |                  0 |           0 |             0 |      Hutang                                                                                                                                        |         0.00 |
|   58 | HUTANG & MODAL       |        88 |   89 |       9 |    2 |                  0 |           0 |             0 |           Hutang Jangka Pendek                                                                                                                     |         0.00 |
|   59 | HUTANG & MODAL       |        89 |  106 |       9 |    3 |                  0 |           0 |             0 |                Hutang Dagang Lainnya                                                                                                               |         0.00 |
|   60 | HUTANG & MODAL       |        89 |   93 |       9 |    3 |                  0 |           0 |             0 |                Hutang SDL                                                                                                                          |         0.00 |
|   71 | HUTANG & MODAL       |        88 |   89 |       9 |    2 |                  0 |           1 |             1 |           => TOTAL HUTANG JANGKA PENDEK                                                                                                            |         0.00 |
|   72 | HUTANG & MODAL       |        88 |   90 |      10 |    2 |                  0 |           0 |             0 |           Hutang Jangka Panjang                                                                                                                    |         0.00 |
|   73 | HUTANG & MODAL       |        90 |  105 |      10 |    3 |                  0 |           0 |             0 |                Hutang Bank                                                                                                                         |         0.00 |
|   73 | HUTANG & MODAL       |        88 |   90 |      10 |    2 |                  0 |           1 |             1 |           => TOTAL HUTANG JANGKA PANJANG                                                                                                           |         0.00 |
|   74 | HUTANG & MODAL       |       213 |   91 |    NULL |    1 |                  0 |           0 |             0 |      Modal                                                                                                                                         |         0.00 |
|   75 | HUTANG & MODAL       |        91 |  107 |      11 |    2 |                  0 |           0 |             0 |           Modal Saham                                                                                                                              | 500000000.00 |
|   77 | HUTANG & MODAL       |        91 |  107 |      11 |    2 |                  0 |           1 |             1 |           => TOTAL MODAL                                                                                                                           | 500000000.00 |
|      | TOTAL HUTANG & MODAL |           |      |         |      |                    |             |               | TOTAL HUTANG JANGKA PENDEK + TOTAL HUTANG JANGKA PANJANG  + TOTAL MODAL                                                                            | 500000000.00 |
|   77 | AKTIVA               |        30 |   30 |       2 |    0 |                  1 |           1 |             3 | => TOTAL AKTIVA LAINNYA,MODAL | 756075000.00 |
+------+----------------------+-----------+------+---------+------+--------------------+-------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------+--------------+

这在数据库级别可行吗?如果您想使用它,这里是 sql 文件Pastebin

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。