1

Oracle 11g Express では、次のクエリがあります。

select t1.product_name, SUM(t1.product_cost_per_month)
FROM table1 t1 INNER JOIN table2 t2 on (t1.product_name = t2.product_name)
WHERE t2.date > sysdate
GROUP BY t1.product_name

これは機能し、特定の日付以降に製品ごとにグループ化された、1 か月あたりの製品コストの合計を返します (ここでは例として sysdate を使用します)。

ただし、各製品、つまりベンダーに関する追加の説明を表示したいと思います。だから私はこのコードを使用します:

select t1.product_name, SUM(t1.product_cost_per_month), t2.vendor
FROM table1 t1 INNER JOIN table2 t2 ON (t1.product_name = t2.product_name)
WHERE t2.date > sysdate
GROUP BY t1.product_name

「グループ化」を使用するには、すべての変数に集計関数を適用する必要があるため、これは機能しませんが、「ベンダー」などの集計関数は無意味に思えます...これを行う方法はありますか?

私はおそらく解決するために短い pl/sql ルーチンを書くつもりですが、これを行う純粋な SQL の方法があるかどうか疑問に思っていますか?

4

1 に答える 1

1

ベンダーも GROUP BY 句に含める必要があります。

GROUP BY t1.product_name, t2.vendor

あなたがしていることを達成するための別の手法は、ネストされたクエリです。

SELECT t1.product_name,
    (
        select sum(product_cost_per_month) 
         from table2 t2 
         where 
            t1.product_name = t2.product_name 
            and t2.date > sysdate
    ) as total_product_cost,
    t1.another_field,
    t1.another_field2,
    t1.another_field3
FROM table1

(エラーについてはお詫びします。私はこれをテストしていませんが、これで要点がわかります)

于 2012-06-10T18:16:22.483 に答える