首页 > 解决方案 > 如何将具有相同外键的计算字段组合起来?

问题描述

标题可能不完全准确地解决我的问题,但我想不出如何措辞。

在考虑初始设置成本后,我正在使用视图来计算项目的调整单价,因此计算的字段如下所示:

"SetupFee" + "Shipping" + ( "UnitPrice" * "Quantity" ) / "Quantity"

来自这些字段的表称为 ItemInvoice,并且具有指向仅称为 Item 的表的外键,该表包含特定于项目的信息,例如描述。我遇到的问题是,当一个项目有多个发票时,这种方法会给我两个不同的输出。例如,如果我有第 1 项的一张发票和第 2 项的两张发票,它会显示:

ItemName - (Calculation)
Item1 - 45.11
Item2 - 60.30
Item2 - 50.67

总的来说,我对我的 SQL 和数据库真的很生疏(我是第一次使用 LibreOffice Base),我想知道如何将两张发票的成本合并起来,然后除以总数量。所以像:

("SetupFee1" + "Shipping1" + ( "UnitPrice1" * "Quantity1" ) + "SetupFee2" + "Shipping2" + ( "UnitPrice2" * "Quantity2" )) / ("Quantity1" + "Quantity2")

...或者只是平均两个单独的结果,尽管我不确定这将如何改变十进制值。

到目前为止,我已经完全在 LibreOffice Base 的设计视图中制作了这个视图,但如果我知道我将要做什么,我并不反对使用 SQL。

编辑:LibreOffice 7.0 和嵌入式 HSQLDB 数据库。

标签: sqlviewcalculated-fieldlibreoffice-base

解决方案


好的,所以我想我已经弄清楚了,尽管我觉得可能应该有一种更简单的方法。

绝对必须深入研究这个 SQL 语句,但这似乎符合我的要求:

SELECT "Item Name", AVG("Adjusted Unit Price") AS "Average Adjusted Unit Price"
FROM (
    SELECT "Item"."ItemName" AS "Item Name", ( "SetupFee" + "Shipping" + ( "UnitPrice" * "Quantity" ) ) / "Quantity" AS "Adjusted Unit Price"
    FROM "ItemInvoice", "Item" WHERE "ItemInvoice"."ItemID" = "Item"."ItemID"
)
GROUP BY "Item Name"

推荐阅读