有没有办法做一个select语句和union 2列,用一个信息替换另一个中的任何NULL值

时间:2014-09-12 05:43:43

标签: sql oracle union

我正在使用Oracle。我有两个表,一个存储客户ID,名称,账单地址;我有另一个表存储商店ID,名称和地址。我需要SELECT(并使用UNION,这是作业的一部分)CustomerID及其帐单地址,如果他们的帐单地址为NULL,则需要将NULL值替换为与客户关联的商店的地址。

我最接近我想要的是:

SELECT s.ordid, C.billingaddress FROM ShopOrder S
INNER JOIN Customer C 
ON C.custid = S.custid

WHERE billingaddress = NULL
UNION 
SELECT S.ordid, S.deliveryaddress FROM ShopOrder S

但这只是显示送货地址。我有一种感觉,我可能需要一个Outerjoin或括号,但我不确定。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我为你准备了一个类似的测试案例:

我有两个表,emp和emp1。我想选择" comm"来自emp的字段,但只要它为NULL,我将从emp1中取值为NOT NULL。这正是您提到的规则。

SQL> DROP TABLE EMP1 PURGE
  2  /

Table dropped.

SQL> CREATE TABLE EMP1 AS SELECT * FROM EMP
  2  /

Table created.

SQL> UPDATE EMP1 SET COMM = 9999
  2  /

14 rows updated.

SQL> COMMIT
  2  /

Commit complete.

SQL> SELECT e.ename ,
  2    CASE
  3      WHEN e.comm IS NULL
  4      THEN e1.comm
  5      ELSE e.comm
  6    END comm
  7  FROM emp e,
  8    EMP1 E1
  9  WHERE E.EMPNO=E1.EMPNO
 10  /

ENAME            COMM
---------- ----------
SMITH            9999
ALLEN             300
WARD              500
JONES            9999
MARTIN           1400
BLAKE            9999
CLARK            9999
SCOTT            9999
KING             9999
TURNER              0
ADAMS            9999
JAMES            9999
FORD             9999
MILLER           9999

14 rows selected.

SQL>