2017-05-12 6 views
1

私は現在、idとそのidフィールドの基準の数を含むテーブルを持っています。たとえば、私のテーブルは次のようになります。idフィールドに一致する可能性がある新しい列を追加する方法

ID Banana_count 
1  13 
2  23 
3  56 

元のカウントは他のテーブルからの結合とクエリから来ています。

create FRUIT_TABLE as 
select id, count (fruit) 
from my_table a 
where exists (select null from DATE_FED b 
       where a.id = b.id 
       and date = (2/11/17) 
       and fruit_type = 'banana') 
group by id; 

私の質問は、それが見えるように私は、この特定のテーブルに他の属性を追加する方法、であるように:

ID Banana_count Apple_count Orange_count 
1  13   35    22 
2  23       44 
3  56 
4      33   55 
5         11 
私はまだでないかもしれませんFRUIT_TABLEに多くのIDを追加する必要があります

現在のIDと関連付けられている果物については、私は同じ行にそれらを追加したいと思います。

答えて

1

これはmergeのための古典的なユースケースである:私はあなたが単にIDとりんごの数を持っているテーブルから挿入されるように、少し問題を単純化するようにしている

merge into fruit_table 
    using apple_table 
    on (fruit_table.id = apple_table.id) 
when matched then update set 
    fruit_table.apples = apple_table.apples 
when not matched then insert (id,apples) 
    values(
     apple_table.id, 
     apple_table.apples 
    ); 

の構造マージはより明確です。しかし、実際の要件を満たすために、文のusing...セクションにサブクエリを挿入することができます。

+0

を私は私のクエリに基づいてビューを作成あなたが提供したクエリを使用しようとしました。 ora-00969:ONキーワードエラーがありません。私の質問にはONがあります。何か案は? – user7002207

+0

@ user7002207申し訳ありませんが、 'on'節のまわりの括弧のように見えます(私はDB2ユーザーであり、それを認識しませんでした)。私は答えを更新しました。 –

+0

、ありがとうございました – user7002207

1

私は次のようになります[正確な答えはできませんので、あなたのテーブル定義、または他のアプリケーションや要件制約を提供していませんでした]:

create FRUIT_TABLE as 
select id 
, sum(case when fruit_type = 'banana' then 1 else 0 end) Banana_count 
, sum(case when fruit_type = 'apple' then 1 else 0 end) apple_count 
, sum(case when fruit_type = 'orange' then 1 else 0 end) orange_count 
from my_table a 
group by id; 
+0

既存のテーブルに新しい列を追加するのではなく、新しいテーブルを作成するだけの簡単な方法です。 –

関連する問題