如何在某些情况下在两个字段值之间切换?

Posted

技术标签:

【中文标题】如何在某些情况下在两个字段值之间切换?【英文标题】:How to switch between two field value under some condition? 【发布时间】:2013-02-16 16:24:11 【问题描述】:

这样的表格:

id  doc_before  doc_after
0      100
1      167         153
2      132       

如果存在,我想获取doc_after,否则获取doc_before

如何做到这一点?

我想要这样的结果:

0    100
1    153
2    132

【问题讨论】:

你想要这个在 sql 还是 vb/c# 中? 还有,你试过什么? 我想要sql,但如果没有办法,我想要linq中的某种方式 请记住表是有名字的;在您的问题中包含表名!此外,由于您说您需要跟踪数据的来源(值来自哪一列),因此应该更新问题以包含该要求。此外,作为任何与 DBMS 相关的问题的一般规则,最好指明您正在使用或感兴趣的 DBMS 版本。 @JonathanLeffler : 非常感谢您的建议,我会在接下来的问题中解决这个问题 :) :) 【参考方案1】:
SELECT id
  , COALESCE(doc_after, doc_before) AS the_doc
FROM the_table
   ;

【讨论】:

这是一个 ANSI 函数,在 sybase 中可以有其他名称。 (在 oracle 中称为 IFNULL(), IIRC) SELECT task_code , nvl(pdf_column , db_name) AS the_doc FROM df1task ; 这对我有用,但无法确定数据来自哪个字段 为什么要关心数据来自哪些字段?这不是您最初问题的一部分,我不认为它是有用的信息。 @DanBracuk : 这对我很重要 :)【参考方案2】:

您可以使用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 值。 但是有什么方法可以知道它是来自doc_after还是doc_before 您可以在SELECT 声明中添加另一个项目。我更新了我的答案 实际上,对于informix,您必须使用nvl(),而不是isnull()。 publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/… 有一个语法错误:SELECT ID, CASE WHEN nvl(doc_after,'') &lt;&gt; '' THEN doc_after ELSE doc_before END AS doc , CASE WHEN nvl(doc_after,'') &lt;&gt; '' THEN 'doc_after' ELSE 'doc_before' END AS docitcamefrom FROM yourtable 第二个nvl【参考方案3】:

更惯用的 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”。

【讨论】:

以上是关于如何在某些情况下在两个字段值之间切换?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有内存泄漏的情况下在 ARC 中的 UIView 之间切换?

如何在不使用 &nbsp 的情况下在行内元素之间添加空格 [重复]

如何在没有 SQL Server Management Studio 的情况下在 SQL Server Express LocalDB 中使用 Visual Studio 2013 创建两个表之间的关

如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?

在活动之间切换而不关闭它们

在 iOS 中,如何在两个单元格中的文本字段之间切换?