Oracle SQL自定义数据字段

时间:2016-11-18 22:55:39

标签: sql oracle

我有2个表,其中列出了针对特定订单号TableA和TableB的QTY。 TableB是地板上的用户可以输入但不需要的自定义字段(因此很少输入)。

未输入时,DB中没有它的记录,而不是它的NULL不存在。因此,如果我尝试离开加入表格或创建一个案例陈述,它会列出我需要的订单号。

例如

    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%'

输出:

OrderBO:SO1234  YIELD_QTY   15  1.000000

如果我将订单更改为没有输入的订单,如SO1235,则不返回任何内容。

尝试使用以下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列?

我对任何建议持开放态度,我仍然在学习,所以我可能会感到愚蠢

1 个答案:

答案 0 :(得分: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%';

注意:

  • second 表中的条件需要在ON子句中。否则,left join会变为inner join
  • 从不from子句中使用逗号。 始终使用明确的join语法。