本帖最后由 PennyCheung 于 2025-4-9 13:43 编辑
下述SQL语句无法递归,点击确定时,会弹出编辑视图失败提示(如图片所示)请各位大佬帮忙解决一下!万分感激!
WITH MaterialQuantities AS (
SELECT
`月初bs在库`.`物料名称` AS `物料名称`,
SUM(`月初bs在库`.`数量`) AS `数量`,
'月初BS在库' AS `来源`
FROM
`月初bs在库`
GROUP BY
`月初bs在库`.`物料名称`
UNION ALL
SELECT
`月初发注残`.`物料名称` AS `物料名称`,
SUM(`月初发注残`.`数量`) AS `数量`,
'月初发注残' AS `来源`
FROM
`月初发注残`
GROUP BY
`月初发注残`.`物料名称`
UNION ALL
SELECT
`月初手配残`.`物料名称` AS `物料名称`,
SUM(`月初手配残`.`数量`) AS `数量`,
'月初手配残' AS `来源`
FROM
`月初手配残`
GROUP BY
`月初手配残`.`物料名称`
UNION ALL
SELECT
`月初订单残`.`物料名称` AS `物料名称`,
SUM(`月初订单残`.`数量`) AS `数量`,
'月初订单残' AS `来源`
FROM
`月初订单残`
GROUP BY
`月初订单残`.`物料名称`
UNION ALL
SELECT
`月初工程内在库`.`物料名称` AS `物料名称`,
SUM(`月初工程内在库`.`数量`) AS `数量`,
'月初工程内在库' AS `来源`
FROM
`月初工程内在库`
GROUP BY
`月初工程内在库`.`物料名称`
UNION ALL
SELECT
`月初生管仓在库`.`物料名称` AS `物料名称`,
SUM(`月初生管仓在库`.`数量`) AS `数量`,
'月初生管仓在库' AS `来源`
FROM
`月初生管仓在库`
GROUP BY
`月初生管仓在库`.`物料名称`
),
PivotTable AS (
SELECT
`materialquantities`.`物料名称` AS `物料名称`,
SUM(CASE WHEN `materialquantities`.`来源` = '月初BS在库' THEN `materialquantities`.`数量` ELSE 0 END) AS `月初BS在库数量`,
SUM(CASE WHEN `materialquantities`.`来源` = '月初发注残' THEN `materialquantities`.`数量` ELSE 0 END) AS `月初发注残数量`,
SUM(CASE WHEN `materialquantities`.`来源` = '月初手配残' THEN `materialquantities`.`数量` ELSE 0 END) AS `月初手配残数量`,
SUM(CASE WHEN `materialquantities`.`来源` = '月初订单残' THEN `materialquantities`.`数量` ELSE 0 END) AS `月初订单残数量`,
SUM(CASE WHEN `materialquantities`.`来源` = '月初工程内在库' THEN `materialquantities`.`数量` ELSE 0 END) AS `月初工程内在库数量`,
SUM(CASE WHEN `materialquantities`.`来源` = '月初生管仓在库' THEN `materialquantities`.`数量` ELSE 0 END) AS `月初生管仓在库数量`
FROM
`materialquantities`
GROUP BY
`materialquantities`.`物料名称`
),
RecursiveCTE AS (
-- 初始查询:获取级别为 2、3、4、5 且上级类目等于 ID 的记录
SELECT
`组立制造bom`.`品目编码`,
`组立制造bom`.`ID`,
`组立制造bom`.`级别`,
`组立制造bom`.`上级类目`,
`组立制造bom`.`使用量`,
`组立制造bom`.`良品率`,
`组立制造bom`.`开料数`,
`pivottable`.`物料名称`,
`pivottable`.`月初BS在库数量`,
`pivottable`.`月初发注残数量`,
`pivottable`.`月初手配残数量` AS current_月初手配残数量,
`pivottable`.`月初订单残数量` AS current_月初订单残数量,
`pivottable`.`月初工程内在库数量` AS current_月初工程内在库数量,
`pivottable`.`月初生管仓在库数量` AS current_月初生管仓在库数量
FROM
`组立制造bom`
LEFT JOIN
`pivottable` ON `组立制造bom`.`品目编码` = `pivottable`.`物料名称`
WHERE
`组立制造bom`.`级别` IN (2, 3, 4, 5) AND `组立制造bom`.`上级类目` = `组立制造bom`.`ID`
UNION ALL
-- 递归部分:查找下级记录
SELECT
`组立制造bom`.`品目编码`,
`组立制造bom`.`ID`,
`组立制造bom`.`级别`,
`组立制造bom`.`上级类目`,
`组立制造bom`.`使用量`,
`组立制造bom`.`良品率`,
`组立制造bom`.`开料数`,
`pivottable`.`物料名称`,
`pivottable`.`月初BS在库数量`,
`pivottable`.`月初发注残数量`,
parent.current_月初手配残数量 AS current_月初手配残数量,
parent.current_月初订单残数量 AS current_月初订单残数量,
parent.current_月初工程内在库数量 AS current_月初工程内在库数量,
parent.current_月初生管仓在库数量 AS current_月初生管仓在库数量
FROM
`组立制造bom`
JOIN
RecursiveCTE parent ON `组立制造bom`.`上级类目` = parent.`ID`
LEFT JOIN
`pivottable` ON `组立制造bom`.`品目编码` = `pivottable`.`物料名称`
)
SELECT
`品目编码`,
`ID`,
`级别`,
`上级类目`,
`使用量`,
`良品率`,
`开料数`,
`物料名称`,
`月初BS在库数量`,
`月初发注残数量`,
current_月初手配残数量 AS `月初手配残数量`,
current_月初订单残数量 AS `月初订单残数量`,
current_月初工程内在库数量 AS `月初工程内在库数量`,
current_月初生管仓在库数量 AS `月初生管仓在库数量`
FROM
RecursiveCTE
|