如何在某些条件下切换两个字段值?

时间:2013-02-16 16:24:12

标签: sql linq select informix

使用这样的表:

id  doc_before  doc_after
0      100
1      167         153
2      132       

我想获得doc_after如果存在,则获得doc_before

怎么做?

我想要这样的结果:

0    100
1    153
2    132

3 个答案:

答案 0 :(得分:2)

SELECT id
  , COALESCE(doc_after, doc_before) AS the_doc
FROM the_table
   ;

答案 1 :(得分: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

答案 2 :(得分: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'可以根据您的需要进行更改。