1

像这样的表:

id  doc_before  doc_after
0      100
1      167         153
2      132       

我想得到doc_afterif 存在 else 得到doc_before.

这该怎么做 ?

我想要这样的结果:

0    100
1    153
2    132
4

3 回答 3

2
SELECT id
  , COALESCE(doc_after, doc_before) AS the_doc
FROM the_table
   ;
于 2013-02-16T16:36:11.210 回答
1

您可以使用CASE语句。这是受支持的 Informix 语法。

SELECT ID, CASE WHEN nvl(doc_after,'') <> '' THEN doc_after ELSE doc_before END AS doc
, CASE WHEN nvl(doc_after) <> '' THEN 'doc_after' ELSE 'doc_before' END AS camefrom
FROM yourtable
于 2013-02-16T16:27:51.930 回答
1

CASE 更惯用的用法将避免使用 NVL:

SELECT ID,
       CASE WHEN doc_after IS NULL THEN doc_before ELSE doc_after END AS doc_number,
       CASE WHEN doc_after IS NULL THEN 'B'        ELSE 'A'       END AS doc_source
  FROM AnonymousTable;

显然,可以根据您的需要更改“之后”的编码“A”和“之前”的“B”。

于 2013-02-17T18:20:49.260 回答