2014-02-05 61 views
0

我正在使用Toad 10处理Oracle。我想从5个不同的表创建视图。它也会包含一些计算(数量的增加)以用于最终数据。我如何创建它。对我来说,在.net代码中很容易,但是由于性能原因,决定使用View或Package来完成。我不擅长数据库,我会很感激任何帮助。使用逻辑语句创建视图

通常我会看到来自一个或两个表加入的视图,我可以做。

我会尽量给什么,我想实现一个简单的场景:

假设我有7桌。

  • 人 - 提供个人信息
  • 苹果 - 给苹果的数量销往
  • 橙色 - 给人卖
  • 葡萄橙子的计数 - 给卖
  • 柠檬葡萄计数 - 提供柠檬计数销售
  • 樱桃 - 给出的樱桃数量
  • 其他 - 给出售其他物品的数量

我想输出每个人销售的每件物品的总数。 Required output

现在,在这里我没有其他列,而不是其他表中的其他表中的每个项目都应该添加到基于类别id列的任何水果。例如,其他项目与类别ID 1应加入苹果,同类别ID 2应该被添加到橙色等

我怎么想的人的ID数据项1.

+0

见能有在'apple','orange'等每人ID的多个记录,或做这些表有专人id作为主键? –

+0

在苹果/橙色表格中,同一月份可能有多个相同商品的记录。例如,在一个月内,他可以为苹果/橙子进行2次交易。 – sam113

回答

1
with l_pers as (select personid 
       from person 
       where personid = 1) 
, l_apple as (select sum(quantity) qt 
       from apple 
       join l_pers on (l_pers.personid = apple.personid)) 
, l_orange as (select sum(quantity) qt 
        from orange 
        join l_pers on (l_pers.personid = orange.personid)) 
, o_others as (select sum(decode(category,1,quantity,0)) appleqt  
        ,  sum(decode(category,2,quantity,0)) orangeqt 
        from others 
        join l_pers on (l_pers.personid = others.personid)) 
select l_pers.personid as personid 
,  l_apple.qt + o_others.appleqt as apples 
,  l_orange.qt + o_others.orangeqt as orange 
from l_pers 
, l_apple 
, l_orange 
, o_others; 
+0

太好了。我能理解这一点。现在,我怎样才能每月获得它。可以说,在苹果,橙子和其他表格中还有另外两列叫'月'和'年'。我如何获得特定年份的所有月份的数据,如2013年。 – sam113

+0

您开始在问题中说明所有要求,而不是在某人回答问题后分段。 –

+0

对于雷内,我很抱歉。我在看到答案后想到了这条要求。我错误地认为,如果我能得到一个案例,我可以很容易地按月分组。你认为我应该自己提出另一个问题吗? – sam113

0

尝试类似

select 
    id     person_id, 
    sum(apple .amount) apple, 
    sum(orange.amount) orange, 
    sum(grape .amount) grape, 
    sum(lemon .amount) lemon, 
    sum(cherry.amount) cherry, 
    sum(others.amount) others 
from 
    person    left join 
    apple using (id) left join 
    orange using (id) left join 
    grape using (id) left join 
    lemon using (id) left join 
    cherry using (id) left join 
    others using (id) 
where 
    id = 1 
group by id; 

this sql fiddle