2016-11-18 6 views
0

特定の注文番号、Ta​​bleAおよびTableBに対してQTYがリストされている2つのテーブルがあります。 TableBは、フロア上のユーザーが入力できるが必須ではない(ほとんど入力されない)カスタムフィールドです。Oracle SQLのカスタムデータフィールド

の場合が入力されていません DBにそのレコードがありません、そのNULLはありません。だから、私は試してみて、テーブルを結合したり、ケースステートメントを作成する必要がある注文番号をnleaves。

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 

注文を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列そうでなければ?

私はどんな提案を開いています、私はまだそれは私が

+3

あなたのタイトルは「Oracle」ですが、あなたが「SQL Server 2012」と主張している質問ではありますが、クエリははっきりとオラクルです。 **あなたは本当に使っていますか? OracleとSQL Serverは** 2つの非常に異なる**ものです。 –

+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 joininner joinに変わります。
  • from節では、カンマを使用しないでください。 常には、明示的なjoin構文を使用します。
+0

働いて、ありがとう! – user3597849