有了这样的表:如何在某些情况下在两个字段值之间切换?
id doc_before doc_after
0 100
1 167 153
2 132
我想要得到的doc_after
是否存在其他获得doc_before
。
如何做到这一点?
我想是这样的结果:
0 100
1 153
2 132
有了这样的表:如何在某些情况下在两个字段值之间切换?
id doc_before doc_after
0 100
1 167 153
2 132
我想要得到的doc_after
是否存在其他获得doc_before
。
如何做到这一点?
我想是这样的结果:
0 100
1 153
2 132
您可以使用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
您可能需要将'IS NOT NULL'添加到条件以满足NULL值。 – 2013-02-16 16:30:08
非常感谢。我节省了我的时间:D – 2013-02-16 16:35:36
,但有什么方法可以知道它是来自'doc_after'还是'doc_before' – 2013-02-16 16:38:41
SELECT id
, COALESCE(doc_after, doc_before) AS the_doc
FROM the_table
;
非常感谢,但我在'informix'中找不到'COALESCE' – 2013-02-16 16:40:40
它是一个ANSI函数,可以在sybase中有其他名称。 (在Oracle它被称为IFNULL(),IIRC) – wildplasser 2013-02-16 16:44:38
'选择task_code ,NVL(pdf_column,DB_NAME)AS the_doc FROM df1task ;' 这工作我,但不能确定数据来自哪个领域,从 – 2013-02-16 17:02:11
更惯用的使用的情况下会避免使用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' '前' 是可以改变以满足您的需求。
你想在sql或vb/c#中使用这个吗? – 2013-02-16 16:24:55
另外,你有什么尝试? – 2013-02-16 16:25:32
我想'sql',但是如果没有办法,我想''linq'中的某种方式 – 2013-02-16 16:26:15