我有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列?
我对任何建议持开放态度,我仍然在学习,所以我可能会感到愚蠢
答案 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%';
注意:
ON
子句中。否则,left join
会变为inner join
。from
子句中使用逗号。 始终使用明确的join
语法。