1

SELECT ステートメントを作成しようとしている Oracle データベースに 2 つのテーブルがあります。最初のテーブルは「寄付」と呼ばれ、次の属性が含まれています。donation_id、donation_date、donor_id、donation_type (タイプには「Incoming」または「Outgoing」の 2 つのオプションがあります)

2 番目のテーブルである交差テーブルは「donation_item」と呼ばれ、item_id、donation_id、location_id、weight の属性を持ちます。

私が特に興味を持っている列は、donation_type、item_id、および weight 列です。私の目的は、集計関数 (SUM) を使用して、特定のdonation_type ('Incoming') の特定の item_id の重みを追加し、そこから答えたら、「発信」の寄付タイプのアイテムの同じ 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 に答える