将三个字段合二为一

Posted

技术标签:

【中文标题】将三个字段合二为一【英文标题】:Combine three fields into one 【发布时间】:2013-10-16 20:45:46 【问题描述】:

我正在尝试更改我们数据库中名为NonConf 的表之一。目前,我们有三个Yes/No 字段,分别称为ClosedOpenOnHold。我们将添加更多状态,我认为继续为新状态添加字段是个坏主意。相反,我想将这些字段转换为一个 Status 字段。

我已经将Status 字段添加到NonConf 表中。如何使用 UPDATE 查询来填充 Status

【问题讨论】:

【参考方案1】:

您可以使用Switch 表达式而不是嵌套多个IIf 表达式。

UPDATE NonConf AS N
SET N.Status = 
    Switch
        (
            N.Closed, "Closed", 
            N.Open, "Open",
            N.OnHold,"OnHold",
            True, ""
        );

Switch 的操作类似于 VBA 中的 SELECT CASE。因此,它从表达式为True 的第一个表达式/值对返回值。最后一个表达式/值对 (True, "") 捕获任何落在前面的对中的东西。也许您更愿意使用 Null 或其他值来指示来源的 Yes/No 列都不是 True,而不是空字符串。

【讨论】:

【参考方案2】:

您可以使用一个查询通过嵌套的IIF 一次性更新Status

UPDATE NonConf AS N
SET N.Status = 
IIF (N.Closed, "Closed", 
IIF(N.Open, "Open",
IIF(N.OnHold,"OnHold","")))

【讨论】:

【参考方案3】:

类似的东西,每个状态一个查询

UPDATE yourTable
SET status = 'Closed'
WHERE yourTable.Closed = 'Yes'
  AND status IS NOT NULL

【讨论】:

以上是关于将三个字段合二为一的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/Jquery 将输入字段限制为一位小数和数字

将多行合并为一列,同时用原始表中的“名称”字段替换键

sql查询字段中第一位数为0到9的记录或者第二为为0到9的记录

mysql 同样内容的字段合并为一条的方法

设置查询以搜索 dojo 数据网格的所有字段

如何根据Kendo Grid Angular 4中的条件为一列分配2个字段