1

我在一个 Oracle 数据库中有两个表,我试图从中形成一个 SELECT 语句。第一个表称为“捐赠”,包含以下属性:donation_id、donation_date、donor_id、donation_type(类型有 2 个选项:'Incoming' 或 'Outgoing')

第二个表,一个交集表,称为“donation_item”,具有以下属性:item_id、donation_id、location_id、weight

donation_type、item_id 和 weight 列是我特别感兴趣的。我的目标是使用聚合函数 (SUM) 来添加特定donation_type ('Incoming') 的某个 item_id 的权重,然后从中添加答案,减去“Outgoing”donation_type 项目的相同 item_id 的重量。

我尝试了几个查询,但都产生了错误。鉴于表格的当前结构,我不确定目标是否可行。尝试过的代码示例如下:

SELECT SUM(i.weight) - SUM(o.weight) AS "Total"
FROM donation_item i JOIN donation_item o
ON i.item_id = o.item_id JOIN donations d
ON i.donation_id = d.donation_id 
WHERE i.donation_type <> o.donation_type
AND i.donation_type = 'Incoming';

任何意见是极大的赞赏。谢谢。

4

2 回答 2

1

听起来你想要这样的东西:

SELECT
    DONATION_ITEMS.ITEM_ID,
    SUM
    (
        CASE DONATIONS.DONATION_TYPE
            WHEN 'Incoming' THEN 1
            WHEN 'Outgoing' THEN -1
        END
        *
        DONATION_ITEMS.WEIGHT
    )
FROM
    DONATIONS
    INNER JOIN
    DONATION_ITEMS
    ON
    DONATIONS.DONATION_ID = DONATION_ITEMS.DONATION_ID
GROUP BY
    DONATION_ITEMS.ITEM_ID
于 2012-12-13T05:53:39.930 回答
0

我想你想要

sum(i.weight - o.weight)
于 2012-12-12T23:57:43.077 回答