Snowflake SQL:如何复制记录并将STATUS字段修改为'ALL'?
实现每条记录生成副本并修改STATUS的SQL方案
最简便的实现方式根本不需要窗口函数,用UNION ALL就能直接搞定,这也是效率最高的方案:
SELECT ID, DATE_OPENED, DATE_CLOSED, STATUS, TREATMENT FROM your_table UNION ALL SELECT ID, DATE_OPENED, DATE_CLOSED, 'ALL' AS STATUS, TREATMENT FROM your_table;
说明:
- 第一部分
SELECT直接取出原表所有记录,保持原样不变 - 第二部分
SELECT同样取出所有字段,但把STATUS固定设为'ALL',生成副本记录 - 用
UNION ALL而非UNION,因为不需要去重(原记录和副本的STATUS字段值不同),UNION ALL的执行性能更优
你提到的ROW_NUMBER() OVER(PARTITION BY ID ORDER BY 1) = 1这类窗口函数,是用来筛选分组内特定行的(比如每个ID取第一条记录),完全不适用当前场景——我们需要的是复制所有记录,不是筛选,用窗口函数反而会把问题复杂化,完全没必要。
如果需要把结果写入新表,可以在语句前加INSERT INTO new_table (...),具体语法可根据你的数据库类型调整。
内容的提问来源于stack exchange,提问作者Blackdynomite
相关产品推荐
相关产品推荐

