使用“有回馈”计算总价

schw4ndi

我有一张表格“ Leistung”(这是英语中的活动),一个表用于两个具有给定数量的活动(benoetigt)之间的匹配。因此,例如,ID为2的活动需要ID为3的三个活动。

每个活动(价格)都有价格。

我现在想计算所有活动(leistung)的总价格,包括适当数量的子活动的价格。

这是我的带有一些测试数据的表:

CREATE TABLE Leistung (
  lnr INTEGER PRIMARY KEY,
  bezeichnung VARCHAR(100) NOT NULL,
  price NUMERIC(7,2) NOT NULL
);

CREATE TABLE benoetigt (
  lnr INTEGER REFERENCES Leistung(lnr),
  benoetigt_lnr INTEGER REFERENCES Leistung(lnr),
  amount INTEGER NOT NULL,
  PRIMARY KEY (lnr,benoetigt_lnr)
);

INSERT INTO Leistung(lnr, bezeichnung, price) VALUES
  (1, 'Discokugel', 100),
  (2, 'Strobolicht', 100),
  (3, 'Verstärker', 90),
  (4, 'Gelaender',50),
  (5, 'Bühne',50),
  (6, 'Bühnenelement',20),
  (7, 'Stromverteiler', 40),
  (8, 'Stromkabel', 20);

INSERT INTO benoetigt (lnr, benoetigt_lnr, amount) VALUES
  (5,6,12),
  (1,7,1),
  (2,7,1),
  (7,8,1);

我非常确定该解决方案仅适用于“ WITH RECURSIV”查询。我的第一次尝试是:

WITH RECURSIVE benoetigtlist(lnr,benoetigt_lnr,menge) AS (
  SELECT lnr, benoetigt_lnr, menge FROM benoetigt
    UNION ALL
  SELECT  b.lnr, b.benoetigt_lnr, b.menge
  FROM benoetigtlist bl, benoetigt b
  WHERE b.lnr = bl.benoetigt_lnr
)
SELECT * FROM benoetigtlist;

但是我不知道如何将结果与活动定价联系起来。

还是这是错误的尝试?

这是来自测试数据的SQL Fiddle,用于更好地理解:SQL Fiddle

编辑:所需的输出是一个列表,其中包含所有活动的总价格,包括其子代的价格。

对于上面的测试数据,结果应类似于:

id  text          price
1  'Discokugel'     160  // 100 + 1*40 + 1*20
2  'Strobolicht'    160  // 100 + 1*40 + 1*20
3  'Verstärker'      90
4  'Gelaender'       50
5  'Bühne'          290  // 50 + 12*20  
6  'Bühnenelement'   20
7  'Stromverteiler'  60  // 40 + 1*20
8  'Stromkabel'      20

例如,ID 5为“Bühne”的活动的总价格为290,因为该活动本身的成本为50。该活动也需要ID 6为12的十二项活动(成本为20)(根据“ benoetigt”中的第一项) 。

总结:50 + 12 * 20 = 290

在作为重复标记的问题中,递归仅在一个表中发生。但是我有一个问题,价格信息在另一个表中。

用户名

现在,您需要将递归CTE的结果与活动表进行两次联接(一次联接以获取父级的价格,另一次联接以获取子级活动的价格)并按父级活动分组,以汇总子项活动的成本:

WITH RECURSIVE benoetigtlist(lnr,benoetigt_lnr,menge) AS (
  SELECT lnr, benoetigt_lnr, amount 
  FROM benoetigt
    UNION ALL
  SELECT  bl.lnr, b.benoetigt_lnr, b.amount
  FROM benoetigtlist bl
  , benoetigt b
  WHERE b.lnr = bl.benoetigt_lnr
)
SELECT parent.lnr
  , parent.bezeichnung
  -- replace null with 0 if there are no child activities
  , parent.price + COALESCE(children_cost.cost, 0) AS cost
FROM Leistung parent
-- subquery that summarizes total cost of all children:
LEFT JOIN (
  SELECT bl.lnr, SUM(bl.menge * l.price) as cost
  FROM benoetigtlist bl
  INNER JOIN Leistung l on bl.benoetigt_lnr = l.lnr
  GROUP BY bl.lnr
) children_cost ON children_cost.lnr = parent.lnr
ORDER BY parent.lnr

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用“有回馈”计算总价

来自分类Dev

在HTML中使用表格来计算总价

来自分类Dev

如何使用Rails计算订单总价?

来自分类Dev

使用jQuery自动计算总价值

来自分类Dev

使用具有PHP回馈价值的PHP获取页面<title>

来自分类Dev

使用jQuery根据选择的选项计算小计和总价

来自分类常见问题

计算React中的总价

来自分类Dev

模型导轨计算总价

来自分类Dev

计算物料清单的总价

来自分类Dev

JavaScript计算商品总价

来自分类Dev

如何计算订单总价?

来自分类Dev

计算React中的总价

来自分类Dev

用JS计算总价

来自分类Dev

如何计算订单总价?

来自分类Dev

如何计算发票的总价?

来自分类Dev

淘汰赛-如何计算每个联系人的选定服务的总价和所有联系人的总价

来自分类Dev

用php计算商品总价

来自分类Dev

Javascript计算税金和总价

来自分类Dev

JavaScript总价计算器?

来自分类Dev

计算总价值字典

来自分类Dev

计算angularjs中的总价格

来自分类Dev

Rails:如何计算每天的总价

来自分类Dev

匹配下拉数量并计算总价

来自分类Dev

计算列表中的所有唯一值+其总数量和每件商品的总价格

来自分类Dev

使用C#删除项目时自动计算ListView中项目的总价值

来自分类Dev

我的问题是关于获得使用 javascript 计算订单总价的解决方案

来自分类Dev

总价计算器逻辑难度

来自分类Dev

用python执行计算杂货总价

来自分类Dev

如何从附加对象中计算总价