2012-10-22 60 views
2

我試圖從單個查詢中得到結果,即使未找到某行時也顯示數量的總和。Oracle SQL:來自具有多個連接和條件的表的總和

該查詢不正是我想要的東西:

select max(m.item_number), max(m.item_description), 
     max(m.uom), sum(nvl(i.qty_ordered,0)) 
from (((dex.ITEM_MASTER m FULL JOIN dex.order_request_items i ON m.item_number = i.item_number) 
          FULL JOIN dex.order_request h ON h.orderid = i.orderid) 
          FULL JOIN dex.customer c ON h.customer_number = c.customer_number) 
where m.item_number in ('199', '198', '11415', '11425', '11435', '1145', '766') 
group by m.item_number 
order by 1 

並返回此

MAX(M.ITEM_NUMBER) MAX(M.ITEM_DESCRIPTION)  MAX(M.UOM) "SUM(NVL(I.QTY_ORDERED,0))" 
11415    Bananas HALF CASE GREEN  1/2  0 
11425    Bananas HALF CASE GREEN TIP 1/2  0 
11435    Bananas HALF CASE RIPE  1/2  0 
1145    Bananas HALF CASE   1/2  5 
198    Watermelons SEEDLESS  EACH  0 
199    Watermelons     EACH  80 
766    Pumpkins EACH    EACH  0 

這將顯示爲沒有數量就好行零。當我添加需要縮小數據的附加條件時,會出現問題。 我需要同樣的結果與附加條件在此查詢

select max(m.item_number), max(m.item_description), 
     max(m.uom), sum(nvl(i.qty_ordered,0)) 
from (((dex.ITEM_MASTER m FULL JOIN dex.order_request_items i ON m.item_number = i.item_number) 
          FULL JOIN dex.order_request h ON h.orderid = i.orderid) 
          FULL JOIN dex.customer c ON h.customer_number = c.customer_number)      
where m.item_number in ('199', '198', '11415', '11425', '11435', '1145', '766') 
and  h.REQUEST_DELIVERY_DATE = TO_DATE('10/24/2012', 'MM/DD/YYYY') 
and  c.subcontractorid is null 
and  h.request_state <> 'Incomplete' 
group by m.item_number 
order by 1 

該查詢返回,雖然這個結果。

MAX(M.ITEM_NUMBER) MAX(M.ITEM_DESCRIPTION)  MAX(M.UOM) "SUM(NVL(I.QTY_ORDERED,0))" 
199    Watermelons     EACH  31 

應顯示爲零的行現在已消失。當使用附加條件時,是否有可能像第一個結果一樣顯示所有行?

謝謝!

+0

在回答此問題之前,我們需要查看數據;我的猜測是你正在篩選數量爲零的記錄,因爲你已經添加了附加條件? – fras85

回答

1

嘗試

select max(m.item_number), max(m.item_description), 
     max(m.uom), sum(nvl(i.qty_ordered,0)) 
from (((dex.ITEM_MASTER m FULL JOIN dex.order_request_items i ON m.item_number = i.item_number) 
          FULL JOIN dex.order_request h ON h.orderid = i.orderid) 
          FULL JOIN dex.customer c ON h.customer_number = c.customer_number)      
where m.item_number in ('199', '198', '11415', '11425', '11435', '1145', '766') 
and  h.REQUEST_DELIVERY_DATE = TO_DATE('10/24/2012', 'MM/DD/YYYY') 
and  c.subcontractorid is null 
and  nvl(h.request_state,'Complete') <> 'Incomplete' 
group by m.item_number 
order by 1 

當你添加上h.request_state你必須考慮可能的空數據的新條件,將NVL可以提供幫助。

hth