SQL每日一题(20211129)要求出每个产品的具体成本是多少

这篇博客探讨了一种使用WITH recursive语句进行递归查询的方法,并结合LEFT JOIN操作处理复杂的数据层级。通过cte、tmp和s三个CTE(公共表表达式),实现了对数据的层次遍历和成本计算。最终,查询结果不仅包括了每个层级的详细信息,还提供了总成本的汇总。
摘要由CSDN通过智能技术生成

在这里插入图片描述

WITH recursive
    cte AS (SELECT a.*, replace(level, '.', '') leve, ROW_NUMBER() over () - replace(level, '.', '') num, cost
            FROM t1129a a
                     LEFT JOIN t1129b b ON a.ingre = b.ingre),
    tmp AS (SELECT item,
                   ingre,
                   leve,
                   qty,
                   num,
                   cost * qty cost,
                   level
            FROM cte
            WHERE leve in (SELECT max(leve) FROM cte GROUP BY num)
            UNION
            DISTINCT
            SELECT c.item,
                   c.ingre,
                   c.leve,
                   c.qty * t.qty qty,
                   c.num,
                   t.cost * c.qty,
                   c.level
            FROM tmp t
                     LEFT JOIN cte c ON t.num = c.num AND t.leve - 1 = c.leve),
    s AS (
        SELECT item, ingre, level, qty, cost
        FROM tmp
        WHERE cost is not null
        order by ingre)
SELECT *
FROM s
UNION ALL
SELECT 'A' item, null ingre, null level, null qty, (SELECT sum(cost) FROM s GROUP BY item, level having level = '.1')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

time丶sand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值