【发布时间】:2015-05-06 12:21:59
【问题描述】:
TL-TR:我想获得由其他物品制成的最终物品的总价值,从中我可以得到购买价格。问题是半成品。
考虑三种类型的项目:
- 成品:它由原材料和/或半成品制成。这些是我想要获得总价值的那些。
- 半成品:由原料和/或半成品制成。
- 原始物品:我有这些物品的单位成本。
最终产品可以由半成品制成,除其他外,该半成品可以由另一个半成品制成等等......在不确定数量的级别上, 直到你得到所有的原始项目。
我知道如何在 C# 上执行此操作,但我对纯 SQL 解决方案感兴趣,我认为这是可行的。
此处提供的 SQL Fiddle:
http://sqlfiddle.com/#!6/138c3
这是我所能得到的查询......
SELECT BOM.output, SUM(P.price * BOM.quantity) as Total
FROM BOM
INNER JOIN
Prices P ON P.input = BOM.Input
GROUP BY BOM.output
但这当然不会将半成品价格计入总和,因为它们不存在于价格表中。
编辑:又一次尝试,但它给出了递归查询中不允许分组的错误。
WITH cte_table AS (
SELECT BOM.output, SUM(P.price * BOM.quantity) as Total
FROM BOM
INNER JOIN
Prices P ON P.input = BOM.Input
GROUP BY BOM.output
UNION ALL
SELECT BOM.output, SUM(ISNULL(P.price,T.Total) * BOM.quantity) as Total
FROM BOM
LEFT JOIN
Prices P ON P.input = BOM.Input
LEFT JOIN
cte_table T ON T.output = BOM.Input
GROUP BY BOM.output
)
SELECT *
FROM cte_table
还有一些预期输出的例子(浅灰色是必须计算的,黑色是数据):
【问题讨论】:
-
这可能是我这几天在这里看到的最完整的问题之一。
标签: sql sql-server recursive-query