WITH cte(bmb01, bmb03, cost) AS ( SELECT bmb01, bmb03, ima53 FROM DS_REPORT.ABMR801110755ERP WHERE bmb01 = 'A801' UNION ALL SELECT b.bmb01, b.bmb03, c.cost + b.ima53*n FROM DS_REPORT.ABMR801110755ERP b JOIN cte c ON b.bmb01 = c.bmb03 CROSS JOIN (SELECT 1 as n) t ) SELECT bmb01,bmb03, SUM(cost) AS total_cost FROM cte GROUP BY bmb01,bmb03; 我说的这个运行的结果
时间: 2024-02-04 09:02:43 浏览: 154
这个 SQL 查询的结果是根据 `ABMR801110755ERP` 表中的数据,对于 `bmb01 = 'A801'` 的所有记录,以及这些记录中的所有下级记录(`bmb03` 与上级 `bmb01` 相等),计算它们的 `ima53` 字段的累加和,作为它们的总成本(`total_cost`),并按照 `bmb01` 和 `bmb03` 进行分组。
由于这是一个递归查询,查询结果会包含所有符合条件的记录及其下级记录的总成本。
相关问题
WITH cte(bmb01, bmb03, cost) AS ( SELECT bmb01, bmb03, ima53 FROM DS_REPORT.ABMR801110755ERP where bmb01='A801' UNION ALL SELECT b.bmb01, b.bmb03, c.cost + b.ima53 FROM DS_REPORT.ABMR801110755ERP b JOIN cte c ON b.bmb01 = c.bmb03) SELECT bmb01,bmb03, SUM(cost) AS total_co FROM cte GROUP BY bmb01,bmb03;
这是一段 SQL 查询语句,它使用了递归查询(CTE)来计算物料清单中每种物料的成本。具体来说,这个查询语句会从表 DS_REPORT.ABMR801110755ERP 中选择编码为 A801 的物料清单(即顶层物料),然后通过递归查询,逐级计算下级物料的成本,并将结果按照顶层物料和下级物料进行分组,得到每个物料的总成本。
查询语句中使用了关键字 WITH 来定义 CTE,即递归查询的初始查询,然后使用 UNION ALL 和 JOIN 连接语句来进行递归查询,最后使用 GROUP BY 子句对结果进行分组求和。
WITH RECURSIVE cte(bmb01, bmb03, ima53) AS ( SELECT bmb01, bmb03, ima53 FROM DS_REPORT.ABMR801110755ERP WHERE bmb01 = 'A801' UNION ALL SELECT b.bmb01, b.bmb03, c.ima53 + b.ima53 FROM DS_REPORT.ABMR801110755ERP b JOIN cte c ON b.bmb01 = c.bmb03 ) SELECT bmb01,bmb03,SUM(ima53) AS total_cost FROM cte GROUP BY bmb01,bmb03;
这是一个使用递归查询的SQL语句。递归查询是指在查询过程中使用了自己查询自己的方式,通常用于处理树形结构数据,比如部门树、分类树等。
具体来说,这个SQL语句的作用是查询表DS_REPORT.ABMR801110755ERP中以'A801'为根节点的部门及其子部门的成本总和。其中,bmb01是部门编码,bmb03是部门的上级编码,ima53是部门的成本。
递归查询的过程如下:
1. 首先,从ABMR801110755ERP表中选取bmb01为'A801'的部门,将它的bmb01、bmb03和ima53三列作为结果集的一部分。
2. 然后,以这个部门为基础,再次从ABMR801110755ERP表中查询与它有关系的部门,也就是它的子部门,将这些子部门的bmb01、bmb03和ima53三列加入结果集。这里用到了UNION ALL关键字,表示两个查询结果集的并集。
3. 接下来,对于每个子部门,重复步骤2,查询它的子部门并将其加入结果集。这个过程将会一直持续下去,直到没有更多的子部门为止。
4. 最后,对结果集按照bmb01和bmb03进行分组,计算每个分组的ima53的总和,得到每个部门及其子部门的成本总和。
注意,这个查询使用了CTE(公共表达式)来定义递归查询的过程,CTE是一种在SQL语句中定义临时表的方式,常用于递归查询和复杂的分析查询。
阅读全文