2014-10-20 63 views
0

所以我有這樣的兩個表,加入兩個表中的值和分組它的價值

TABLE1,

NAME COMPONENT QUANTITY STATUS 
NAME1 COLUMN 10  READY 
NAME2 COLUMN 20  READY 
NAME3 COLUMN 15  NOTREADY 
NAME4 COLUMN 10  READY 
NAME5 BEAM  20  NOTREADY 
NAME6 BEAM  15  NOTREADY 
NAME7 BEAM  10  READY 
NAME8 GIRTH  30  NOTREADY 
NAME9 GIRTH  25  NOTREADY 

TABLE2,

NAME PROCESS 
NAME1 5 
NAME2 7 
NAME4 10 
NAME7 8 
在軟件這個流程時,該項目

所以沒有準備好,它不會在TABLE2中出現。而table2是另一個不同的過程。 什麼我期待在我的輸出看到的是這樣的

COMPONENT_RES COMP_READY COMP_NOT_READY TOTAL_PROCESS 
COLUMN  40   15    22 
BEAM   10   35    10 
GIRTH   0   55    0 

我的財產以後的查詢是這樣

select distinct md.component COMPONENT_RES, sum(md.quantity) COMP_READY, 
(select sum(md.quantity) COMP_NOT_READY from table1 md where md.status = 'NOTREADY') 
from table1 md where md.status = 'ACTIVE' 
group by md.component 

somethins我在這裏有2個問題, 1.我的詢問不工作的條件分離COMP_READY和COMP_NOT_READY 2.我嘗試了百萬次,當GIRTH不存在但必須顯示爲0時,如何從第二個表中整合TOTAL_PROCESS。

感謝gu YS

回答

0

你需要做兩個聚合和結果結合在一起:

select c.component, c.comp_ready, c.comp_notready, cp.total_process 
from (select component, 
      sum(case when status = 'READY' then Quantity else 0 end) as Comp_Ready, 
      sum(case when status = 'NOTREADY' then Quantity else 0 end) as Comp_NotReady, 
     from table1 
     group by component 
    ) c left join 
    (select t1.component, sum(t2.component) as total_process 
     from table1 t1 join 
      table2 t2 
      on t1.name = t2.name 
     group by t1.component 
    ) cp 
    on c.component = cp.component; 

訣竅是,第二子查詢,以獲得相應的組件需要join

+0

真棒...感謝戈登 – 2014-10-21 03:45:46

+0

我不知道爲什麼這是downvoted。 – 2014-10-21 09:33:36

+0

我沒有downvoted這個... – 2014-10-23 03:39:23

1

你需要的是一個表之間的OUTER JOIN。

SQL Fiddle

查詢1

select 
table1.component_, 
sum(case when table1.status_ = 'READY' then table1.quantity else 0 end) comp_ready, 
sum(case when table1.status_ = 'NOTREADY' then table1.quantity else 0 end) comp_notready, 
sum(coalesce(table2.process_,0)) total_process 
from table1 left outer join table2 
on table1.name_ = table2.name_ 
group by table1.component_ 

Results

| COMPONENT_ | COMP_READY | COMP_NOTREADY | TOTAL_PROCESS | 
|------------|------------|---------------|---------------| 
|  COLUMN |   40 |   15 |   22 | 
|  GIRTH |   0 |   55 |    0 | 
|  BEAM |   10 |   35 |    8 | 
+0

它運作得很好..我的問題是,我如何添加另一個表?這是否意味着我需要一個左外側奧喬恩? – 2014-10-21 04:11:23

+0

這取決於。如果你只想要通用記錄使用內連接。如果您還想包含不匹配的記錄,請使用外連接。 – Noel 2014-10-21 04:16:53