【问题标题】:PostgreSQL : Change column values based on another column value using some condition in same tablePostgreSQL:使用同一表中的某些条件根据另一个列值更改列值
【发布时间】:2022-11-04 02:04:37
【问题描述】:

我有一个表,想根据某些条件用其他列值的值替换列值。

 
+---------------------+
| Cntry | Code | Value |    
+---------------------+
| US  | C11  | A     | 
| US  | C12  | B     |
| US  | C13  | C     |
| US  | C14  | D     |
| US  | C15  | E     |
| UK  | C11  | A     | 
| UK  | C12  | B     |
| UK  | C13  | C     |
| UK  | C14  | D     |
| UK  | C15  | E     |

+---------------------+

我想根据Cntry的C11的值替换C14的值

所以我的输出应该是这样的。

+---------------------+
| Cntry | Code | Value |
+---------------------+
| US  | C11  | A     | 
| US  | C12  | B     |
| US  | C13  | C     |
| US  | C14  | A     |<====Repalce with C11 for US
| US  | C15  | E     |
| UK  | C11  | G     | 
| UK  | C12  | B     |
| UK  | C13  | C     |
| UK  | C14  | G     |<====Repalce with C11 for UK
| UK  | C15  | E     |

+---------------------+

无论如何在postgresql中可以做到这一点?

谢谢

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    创建样本数据:

    CREATE TABLE table1 (
        cntry varchar NULL,
        code varchar NULL,
        value varchar NULL
    );
    
    INSERT INTO table1 (cntry, code, value) VALUES('US', 'C11', 'A');
    INSERT INTO table1 (cntry, code, value) VALUES('US', 'C12', 'B');
    INSERT INTO table1 (cntry, code, value) VALUES('US', 'C13', 'C');
    INSERT INTO table1 (cntry, code, value) VALUES('US', 'C14', 'D');
    INSERT INTO table1 (cntry, code, value) VALUES('US', 'C15', 'E');
    INSERT INTO table1 (cntry, code, value) VALUES('UK', 'C11', 'G');
    INSERT INTO table1 (cntry, code, value) VALUES('UK', 'C12', 'B');
    INSERT INTO table1 (cntry, code, value) VALUES('UK', 'C13', 'C');
    INSERT INTO table1 (cntry, code, value) VALUES('UK', 'C14', 'D');
    INSERT INTO table1 (cntry, code, value) VALUES('UK', 'C15', 'E');
    

    示例查询:

    select 
        t1.cntry, 
        t1.code, 
        case when t2.value is not null then t2.value else t1.value end as "value"
    from table1 t1  
    left join (
        select 
            cntry, 
            'C14' as code, 
            value 
        from table1
        where code = 'C11'
    ) t2 on t1.cntry = t2.cntry and t1.code = t2.code 
    
    -- Result: 
    cntry   code    value
    US      C11     A
    US      C12     B
    US      C13     C
    US      C14     A
    US      C15     E
    UK      C11     G
    UK      C12     B
    UK      C13     C
    UK      C14     G
    UK      C15     E
    

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多