【问题标题】:Copy fields from one column to another with criteria使用条件将字段从一列复制到另一列
【发布时间】:2020-05-20 23:29:34
【问题描述】:

我有一个名为 02_Month 的表,其中包含以下信息:

|------------------------------------------------------------------
|     Soc   |    Society     |     USD_STD     |     USD_STD_R     |
|------------------------------------------------------------------|
| AB02      |    Plants       |     3.8        |      1            |
| JK01      |    Trees        |     2.4        |      1            |
| WB09      |    Bushes       |     1.2        |      3            |
| COIN      |    Flowers      |     4.6        |      2            |
| KK99      |    Stones       |     66.9       |      3            |
| TCTC      |    Ruby         |     19.0       |      5            |
| WNOL      |    Steel        |     71.1       |      7            |
|------------------------------------------------------------------

如果 Soc 列是 COIN 或 TCTC,我想将 USD_STD 列中的内容复制到 USD_STD_R。我想把这个放在最后:

|------------------------------------------------------------------
|     Soc   |    Society     |     USD_STD     |     USD_STD_R     |
|------------------------------------------------------------------|
| AB02      |    Plants       |     3.8        |      1            |
| JK01      |    Trees        |     2.4        |      1            |
| WB09      |    Bushes       |     1.2        |      3            |
| COIN      |    Flowers      |     4.6        |      4.6          |
| KK99      |    Stones       |     66.9       |      3            |
| TCTC      |    Ruby         |     19.0       |      19.0         |
| WNOL      |    Steel        |     71.1       |      7            |
|------------------------------------------------------------------

这是我写的:

UPDATE 02_Month
SET [02_Month].USD_STD_R = USD_STD
WHERE (([02_Month].Soc="COIN") or ([02_Month].Soc="TCTC"));

它没有按预期工作。我想这是由于WHERE 条件。如果我不写那行,它会在 USD_STD_R 中复制整个 USD_STD 列。

我编写的代码在 USD_STD_R 的所有字段中打印0。为什么它不起作用以及如何纠正?

【问题讨论】:

  • STD_USD_R 列不存在。
  • USD_STD 而不是 STD_USD
  • 那行在我的代码上是正确的,但是当我在这里复制它时,我做错了。还是不行

标签: sql sql-server ms-access


【解决方案1】:

以下内容就足够了:

update [02_month] t
set t.usd_std_r = t.usd_std
where t.soc="COIN" or t.soc="TCTC"

几点说明:

  • 由于您的表名以数字开头,因此必须用方括号括起来。
  • t的使用只是一个别名,以避免重复写入[02_month]
  • 您可以使用t.soc="COIN" or t.soc="TCTC"t.soc in ("COIN","TCTC"),两者应该会产生相同的结果。
  • 双引号 " 通常由 MS Access 使用,但单引号 ' 也应该有效。

【讨论】:

    【解决方案2】:

    USD_STD 而不是 STD_USD

    你也可以使用 IN 运算符

        UPDATE 02_Month
        SET [02_Month].USD_STD_R = USD_STD
        FROM [02_Month]
        WHERE ([02_Month].Soc IN ('COIN','TCTC'));
    

    【讨论】:

    • 那行在我的代码上是正确的,但是当我在这里复制它时,我做错了。还是不行
    • 运行查询时得到了什么?
    • 我得到一列全是零
    • 试试我上面的答案
    • 错误。它说:查询表达式'USD_STD FROM [02_Month]'中的语法错误(缺少运算符)
    【解决方案3】:

    请尝试以下查询。字符串值始终在 '' 内。

    UPDATE 02_Month 
    SET USD_STD_R = USD_STD 
    WHERE Soc in ('COIN','TCTC');
    

    【讨论】:

    • 我必须使用 ' 或 " 来表示字符串吗?IN 是否像 = 一样工作?我只希望社团是 COIN 或 TCTC
    • 试试“Soc in (?,?);”这取决于您的编程语言。
    【解决方案4】:

    您的关系 02_month 与列字段 USD_STD USD_STD_R 但在更新语句中列字段名称为 STD_USD_R 和 STD_USD。

    【讨论】:

    • 嗨@vikas_ved!请考虑澄清和格式化您的答案或/和添加代码 sn-p。谢谢!
    • 这看起来像是一个没有真正回答的评论。您应该正确更新您的答案。
    【解决方案5】:

    您可以使用inner join update,如下所示。

    UPDATE a
    SET a.USD_STD_R = b.USD_STD --You can change another column here as per your need.
    FROM [02_Month] a
    INNER JOIN [02_Month] b ON a.soc = b.soc
        AND a.society = b.society
        AND a.USD_STD = b.USD_STD
        AND a.USD_STD_R = b.USD_STD_R
        WHERE a.Soc in ('COIN','TCTC');
    

    Live Demo Here

    如果您不想使用别名来更新表格。

    UPDATE [02_Month]
    SET [02_Month].USD_STD_R = b.USD_STD --You can change another column here as per your need.
    FROM [02_Month] 
    INNER JOIN [02_Month] b ON [02_Month].soc = b.soc
        AND [02_Month].society = b.society
        AND [02_Month].USD_STD = b.USD_STD
        AND [02_Month].USD_STD_R = b.USD_STD_R
        WHERE [02_Month].Soc in ('COIN','TCTC');
    

    db<>fiddle Demo

    【讨论】:

    • 但是如果表是一样的呢?我应该写 [02_Month] 而不是 a 和 b?
    • @Unnamed 这里我也用过同一张表,这里 a 和 b 只是别名。您可以根据自己的喜好在加入表格时将任何内容写为别名。
    • 但是我必须写而不是写a和b吗?
    • 我没听懂你在说什么
    • @Unnamed 我在更新的答案中删除了一个。但是 b 仍然存在,因为单个表 [02_Month] 被使用了两次。假设如果您需要多一次,那么您可以将其写为 [02_Month] c、[02_Month] d 等。
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2020-06-01
    • 1970-01-01
    • 2021-12-12
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多