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

时间:2018-08-23 15:33:18

标签: sql amazon-athena

我的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查询实现这一目标?

1 个答案:

答案 0 :(得分:0)

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