如何在id字段上添加匹配的新列

时间:2017-05-12 15:05:15

标签: sql database oracle

我目前有一个包含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可能不在当前表中,但对于当前与id相关联的水果,我想将它们添加到同一行。

2 个答案:

答案 0 :(得分:1)

这是merge的经典用例:

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
   );

我已经稍微简化了这个问题,所以你从一个只有id和一个苹果数的表中插入,这样合并的结构就更清晰了。但您可以将子查询插入到语句的using...部分,以满足您的实际要求。

答案 1 :(得分: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;