0

私は周りを見回して、IFがレコード選択の一部を形成するクエリの例を見つけましたが、出力されるものの一部を形成したいと思います。

基本的に、製造元 ID と部品 ID、および一意のレコード番号を含む製品のテーブルがあります。多くの製品にはバーコードがありますが、すべてではありません。私がやりたいのは、すべての製品を一覧表示するクエリを作成することですが、バーコードがない場合は、一意のレコード番号に基づいて内部使用のためのバーコードを生成します。外部目的で有効なバーコードである必要はないので、チェック ディジットの生成は気にしません。何年も前に Excel で同様のことを行ったことがありますが、SQL クエリで IF ビットをどのように処理するかがわかりません。以下は私がやりたいことの例ですが、構文が正しくありません:

SELECT manufacturerID, partID, if(barcode is blank, "5000000"+unqueID, barcode)
FROM products

CASE ステートメントが言及されているのを見たことがありますが、この例にどのように適合するかについて理解できませんでした。

4

3 に答える 3

0

null 値が気になるだけなら、NVL (oracle) や ISNULL (mysql) などが役に立ちます。

SELECT manufacturerID, partID, NVL(barcode, "5000000"+uniqueID) FROM products;

比較がスカラーの場合、decode も役立ちます

http://www.techonthenet.com/oracle/functions/decode.php

SELECT  manufacturerID, partID,
        DECODE (barcode, '',    5000000+uniqueID, barcode) result
FROM suppliers;

または最後に、すべての母、あなたは常にケースを持っています

select manufacturerID, partID,
    CASE 
         WHEN barcode = '' THEN "5000000" + uniqueID 
         ELSE barcode 
    END
from products
于 2012-09-19T12:07:57.027 に答える
0

これを試して:

SELECT manufacturerID, partID,
    CASE 
         WHEN barcode = '' OR barcode IS NULL 
         THEN "5000000" + unqueID 
         ELSE barcode 
    END
FROM products
于 2012-09-19T11:53:55.540 に答える
0

CASEステートメントの構文は次のとおりです。

SELECT manufacturerID, 
  partID, 
  case 
    when barcode is null or barcode = ''
    then '5000000'+unqueID
    else barcode
  end as barcode
FROM products;
于 2012-09-19T11:55:04.560 に答える