【问题标题】:Add calculated column in Snowfalke在雪花中添加计算列
【发布时间】:2021-03-08 13:36:56
【问题描述】:

同样,我似乎找不到一个简单的方法来做到这一点。 但是我已经编码了一段时间了,可能我只是累了,失去了它!

SELECT 
case when "colA" = '1' OR "colB" = 1 then 1
    else 0
end as "colc"
FROM t1

如何将此新列添加到 t1,保留顺序等?

我知道我可以跑

ALTER t1 ADD COLUMN colc

但是如何正确填充这些值?

【问题讨论】:

  • 我认为 Snowflake 不支持计算列。您需要使用视图。

标签: sql snowflake-cloud-data-platform alter


【解决方案1】:

尽管您可以找到相关文档,但实际上可以创建计算列。这是一个例子:

create or replace table computedColTest (id bigint, id2 bigint, derived bigint as (id * id2));
insert into computedColTest values (3, 5);
select * from computedColTest;

结果是:

但是,我认为无法直接翻译您需要的逻辑,因为您似乎无法在其中使用逻辑运算符。但是,您可以根据自己的情况对其进行一些调整,并将您的开关转换为兼容的数学运算。

【讨论】:

    【解决方案2】:

    我认为“虚拟列”是 Snowflake 中派生列的已知方式。 看看这个:

    CREATE 
    OR REPLACE TABLE Virtual_Column_Example (
        colA INT
        , colB INT
        , derived INT AS ( IFF(colA = 1 or colB = 1, 1, 0) )
    );
    
    INSERT INTO Virtual_Column_Example 
        VALUES (0, 0), (1, 1), (1, 2), (2, 1),(2, 2);
    
    SELECT * FROM Virtual_Column_Example;
    
    /*
    ---------------------
    colA | colB | derived
    ---------------------
       0 |    0 |      0
       1 |    1 |      1
       1 |    2 |      1
       2 |    1 |      1
       2 |    2 |      0
    ---------------------
    */
    

    【讨论】:

      【解决方案3】:

      其实我找到了一个行之有效的方法,就用UPDATE

      ALTER TABLE t1 ADD COLUMN "col3" INTEGER DEFAULT 0;
      
      UPDATE t1
      SET "col3"= 1
      WHERE "col1" = 1 OR "col2" = 1;
      

      【讨论】:

      • 这只会在您执行查询时更新一次列值。在更新、删除或创建任何记录后,它不会保留任何逻辑。
      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多