2014-02-05 59 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