应该使用两列:Customer_num是第一个,但如果为null,则使用Vendor_num。
更具体地说,我需要编写一个DECODE语句,它将返回以下内容:
如果Customer_num IS NOT NULL,则返回Customer_num 如果Customer_num为NULL,则返回Vendor_num 如果Vendor_num为空或如果Customer_num为NULL,则返回Customer_num
我该怎么做?
...谢谢
答案 0 :(得分:4)
我认为你正在寻找COALESCE
COALESCE(Customer_num,Vendor_num)
请注意最后一项要求
如果Vendor_num为空或者如果Customer_num为NULL,则返回Customer_num
将返回Customer_num(因为第一个要求)或当它们都为空时返回NULL。
答案 1 :(得分:2)
我同意其他海报的说法,“更好”的方法是使用NVL或COALESCE。但是,虽然我没想到这会起作用,但似乎以下内容会按照您的要求执行:
SELECT DECODE(CUSTOMER_NUM,
NULL, DECODE(VENDOR_NUM,
NULL, CUSTOMER_NUM,
VENDOR_NUM),
CUSTOMER_NUM)
FROM DUAL;
奇怪的是,我们可以使用DECODE将值与NULL进行比较并使其返回(显然)为TRUE。在我看来,上面的代码在概念上与
相同IF CUSTOMER_NUM = NULL THEN
IF VENDOR_NUM = NULL THEN
RETURN CUSTOMER_NUM;
ELSE
RETURN VENDOR_NUM;
END IF;
ELSE
RETURN CUSTOMER_NUM;
END;
显然,DECODE足够亮,可以执行与NULL的比较,就好像使用了IS NULL子句一样。感谢您提出这个有趣的小问题。
答案 2 :(得分:0)
答案 3 :(得分:0)
尝试
SELECT coalesce( expr1, expr2, ... expr_n )
FROM DUAL;