0

我环顾四周,发现了示例查询,其中 IF 构成记录选择的一部分,但我希望它构成输出的一部分。

基本上我有一个产品表,其中包括制造商 ID 和零件 ID 以及唯一的记录号。许多产品都有条形码,但不是全部。我想要做的是创建一个查询以列出所有产品,但如果没有条形码,则根据唯一记录号生成一个供内部使用的条形码。它不需要是用于外部目的的有效条形码,所以我不关心校验位的生成。几年前我在 Excel 中做过类似的事情,但无法弄清楚我如何在 SQL 查询中执行 IF 位。以下是我想做的一个例子,但语法不正确:

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

我已经看到提到的 CASE 语句,但无法理解它如何适合这个示例。

4

3 回答 3

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 回答
0

如果您只是担心空值,则 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 回答