SQL根据条件将值从一列复制到另一列

Posted

技术标签:

【中文标题】SQL根据条件将值从一列复制到另一列【英文标题】:SQL copy value from once column to another based on a condition 【发布时间】:2018-08-23 15:33:18 【问题描述】:

我的 SQL 表中有 4 列:

+--------+----------+---------+--------+-----------+
|Column1 |Column2   |Column3  |Column4 |Column5    |
+--------+----------+---------+--------+-----------+
| 1      |   abc    |   def   |        | 34654     | 
| 2      |   def    |   abc   |        | 798798    |
+--------+----------+---------+--------+-----------+

目标是检查 Column3 是否在 Column2 中,如果匹配,则使用 Column1 的相应值填充 Column4。

例如Column3的“def”匹配Column2的“def”,所以Column4应该是2。

期望的输出:

+--------+----------+---------+--------+-----------+
|Column1 |Column2   |Column3  |Column4 |Column5    |
+--------+----------+---------+--------+-----------+
| 1      |   abc    |   def   |   2    | 34654     | 
| 2      |   def    |   abc   |   1    | 798798    |
+--------+----------+---------+--------+-----------+

我尝试在其中一张表上进行连接,如下所示:

SELECT a.Column1
, a.Column2
, a.Column3
, b.Column1 as Column4 FROM "table" a
LEFT JOIN "table" b on lower(a.Column3) = lower(b.Column2)

当我的表 Column4 已经存在时,这会创建一个新的 Column4。我正在对许多表进行 UNION ALL,我需要所有列(总共 32 个)作为输出。

如何使用 SQL 查询来实现这一点?

【问题讨论】:

查看“case when”语句 @Raj 。 . .我不明白这个问题。只需列出您想要的所有列。 【参考方案1】:

SELECT

 SELECT a.Column1
      , a.Column2
      , a.Column3
      , case when Column2 = Column3 
             then Column1 
             else Column4 -- keep same value
        end as Column4 
      , a.Column5
 FROM "table" a

UPDATE

 update "table"
 set Column4 = case when Column2 = Column3 
                    then Column1 
                    else Column4 -- keep same value
                end

【讨论】:

我们可以选择 * 来获取表中的所有列作为输出吗?您的 SELECT 语句仅输出 Column1、Column2、Column3 和 Column4。输出中的 Column5 呢? 如果您使用*,只需添加Column5,您将拥有2 个Column4

以上是关于SQL根据条件将值从一列复制到另一列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 根据非恒定值的第三列将值从一列复制到另一列

如何将值从一列映射到另一列数据框? [复制]

Postgres 创建触发器函数以在允许插入之前将值从一列复制到另一列

在同一个表中将值从一列复制到另一列

Liquibase:将值从一列复制到具有数组数据类型的另一列

有效地将值从一列替换到另一列 Pandas DataFrame