将列添加到 SQL 表并使用该列的一组固定值分解行
Posted
技术标签:
【中文标题】将列添加到 SQL 表并使用该列的一组固定值分解行【英文标题】:Adding a column to an SQL table and exploding the rows with a set of fixed values for that column 【发布时间】:2021-06-09 20:54:58 【问题描述】:我想向包含未知列的 SQL 表中添加一列,并按该列的一组固定值分解该表中的条目。例如。转
unknown col 1 | ... | unknown col x |
---|---|---|
1 | ... | foo |
2 | ... | bar |
进入
unknown col 1 | ... | unknown col x | new col |
---|---|---|---|
1 | ... | foo | 1 |
2 | ... | bar | 1 |
1 | ... | foo | 2 |
2 | ... | bar | 2 |
未知列的数量也是未知的。我知道将原始表转换为的查询
unknown col 1 | ... | unknown col x | new col |
---|---|---|---|
1 | ... | foo | 1 |
2 | ... | bar | 1 |
我不知道INSERT
查询会将其转换为上方所需的表。该表位于 Google BigQuery 上。
ps:我可以想到解决方法,例如将原始表中的行数乘以n
,其中n
是新列可以取的值的数量,然后添加列并根据行号设置值(这不是简单的设置)对于每一行。我正在寻找一种更清洁的方式。
【问题讨论】:
如果您不知道这些列是什么(即“未知列”),那么我完全不清楚如何添加它们。 我也是。这就是我想要弄清楚的。 你至少知道主键列吗? 【参考方案1】:向具有未知列的 SQL 表中添加一列,并按该列的一组固定值分解该表中的条目。
下面应该做“技巧” - 示例
with new_col_values as (
select [1, 2, 3, 4] values
)
select t.*, val
from `project.dataset.your_table` t,
new_col_values, unnest(values) val
【讨论】:
在添加新列之前或之后会起作用吗?我都不会说。 (不是冲洗,只是仔细检查)。 不确定您的评论是什么意思-上面的内容完全符合您的要求!试试看,玩弄它:o) 只是为了澄清 - 上面的 select 语句可用于创建与您的“规范”匹配的新表,因此您可以与 CREATE TABLE ... 或 CREATE OR REPLACE TABLE ... 一起使用跨度> 你能解释一下发生了什么吗? - 具体来说,from
子句之后的部分。
您将您的表与包含固定值列表的 CTE 交叉连接,然后将该列表取消设置为这些值的集合,然后再次与原始表交叉连接 - 这会给您预期的结果。以上是关于将列添加到 SQL 表并使用该列的一组固定值分解行的主要内容,如果未能解决你的问题,请参考以下文章
Pandas: Grouped DataFrame - 将列的值除以每个组该列中某一行的值
SQL Server 2012 如何将列的数据类型从位更改为日期字段?
将列添加到包含其他列值列表的 pandas DataFrame