2016-11-18 80 views
0

我有2個表中列出了某個訂單號,TableA和TableB的數量。 TableB是一個自定義字段,用戶可以輸入但不是必需的(所以很少輸入)。Oracle SQL自定義數據字段

當它是沒有輸入在DB中沒有它的記錄,它不是它的NULL它不存在。所以,如果我嘗試並左鍵連接表格或創建一個case語句,它會提取我需要的訂單號碼。

例如

order number, qty, custom qty 
     SO1234  10  15 
     SO1235  20  (not entered) 
     SO1236  5  12 
     SO1214  8  1 
     SO1215  2  (not entered) 
     SO1216  4  2 

我需要的

order number, qty, custom qty **mu_qty** 
     SO1234  10  15   15 
     SO1235  20 (not entered) 20 
     SO1236  5  12   12 
     SO1214  8  1   1 
     SO1215  2 (not entered) 2 
     SO1216  4  2   2 

這是我一直在努力:

SELECT s.order_bo, c.attribute, c.value, s.qty 
    FROM wi.sfc s LEFT OUTER JOIN wi.custom_fields c 
    ON s.order_bo = c.handle 
    WHERE c.attribute like '%YIELD_QTY%' 
    AND s.order_bo like '%SO1234%' 

OUTPUT:

OrderBO:SO1234 YIELD_QTY 15 1.000000 

如果我將訂單更改爲沒有任何輸入內容的訂單,它不會返回任何內容。

使用下面COALESCE嘗試:

SELECT s.shop_order_bo, cu.attribute, cu.value, COALESCE(CAST(cu.value AS varchar(10)), CAST(s.qty AS varchar(10))) AS mu_qty 
FROM wip.sfc s, wip.custom_fields cu 
WHERE cu.Attribute like '%YIELD%' 
AND REGEXP_LIKE(cu.value, '^[[:digit:]]') 
AND s.shop_order_bo like 'ShopOrderBO:OR01,M646LC03EF' 
ORDER BY cu.value DESC 

但輸出相同數量(s.qty,無論我做什麼,另外,我不得不添加的正則表達式,因爲人們在地板上有時會把在那裏的日期和其他字不像他們應該的數字,我沒有在該領域拉不幸或我會改變它)

我如何拉Custom_qty列,如果它在那裏,並拉s.qty列如果不是?

我願意接受任何建議,我仍然在學習所以它可能是一些愚蠢的,我很想念

+3

您的標題顯示爲「Oracle」,但在您聲明「SQL Server 2012」的問題中,但查詢清楚或Oracle。那麼你真的在使用哪個**? Oracle和SQL Server是兩個非常**不同的東西。 –

+0

@a_horse_with_no_name,是的,那是我的錯,它令人困惑。我正在使用oracle語法在SQL Server 2012中使用存儲過程。我現在正在更新這個問題,謝謝! – user3597849

回答

0

left join看起來是正確的。使用與coalesce()

SELECT s.order_bo, c.attribute, c.value, s.qty, 
     coalesce(c.value, s.qty) as mu_qty 
FROM wi.sfc s LEFT OUTER JOIN 
    wi.custom_fields c 
    ON s.order_bo = c.handle AND c.attribute like '%YIELD_QTY%' 
WHERE s.order_bo like '%SO1234%'; 

注:

  • 表中的條件需要是ON子句。否則,left join變成inner join
  • 從不from子句中使用逗號。 總是使用明確的join語法。
+0

工作,謝謝! – user3597849