根据表 B 的拆分百分比雪花拆分表 A 的整数列

Posted

技术标签:

【中文标题】根据表 B 的拆分百分比雪花拆分表 A 的整数列【英文标题】:snowflake splitting table A's integer columns based on Table B's split percentage 【发布时间】:2021-04-28 15:53:08 【问题描述】:

我想在雪花查询中执行以下操作。 对雪花来说非常新,从我读过的内容来看,雪花似乎不支持循环

我有两张桌子

Table A
Id   col1   col2   col3
1     ABC    100     50
2     DEF    200      0

Table B
Date        Percentage   Name
2021-04-28       .5       XYZ
2021-04-28       .5       ZYX 

在我的输出查询中,我想拆分表 A 中的每一行

    整数列按表 B 中的百分比进行拆分 从表 B 中添加名称列(以表示针对该特定名称的拆分整数值
Output 
Id   col1   col2   col3    Name
1     ABC     50     25     XYZ
1     ABC     50     25     ZYX
2     DEF    100      0     XYZ
2     DEF    100      0     ZYX

【问题讨论】:

嗨 - 到目前为止你尝试过什么?请使用您迄今为止编写的 SQL 更新您的问题。我不知道为什么你觉得你需要循环来解决这个问题,但雪花确实支持循环 - 通过使用存储过程 【参考方案1】:

这似乎是一个简单的笛卡尔连接:

create or replace table A (id number, col1 varchar, col2 number, col3 number);
insert into A values (1,'ABC',100,50),
(2,'DEF',200,0);

create or replace table B ("Date" date, Percentage number(3,2),Name varchar );
insert into B values ('2021-04-28',0.5,'XYZ'),
('2021-04-28',0.5,'ZYX');


select Id, col1, 
round(col2 * percentage) as col2,
round(col3 * percentage) as col3,
Name 
from A, B;


+----+------+------+------+------+
| ID | COL1 | COL2 | COL3 | NAME |
+----+------+------+------+------+
|  1 | ABC  |   50 |   25 | XYZ  |
|  1 | ABC  |   50 |   25 | ZYX  |
|  2 | DEF  |  100 |    0 | XYZ  |
|  2 | DEF  |  100 |    0 | ZYX  |
+----+------+------+------+------+

【讨论】:

是的,我想我无缘无故地把它复杂化了,这就是我所做的。我做了一个与笛卡尔积相同的交叉连接。非常感谢。

以上是关于根据表 B 的拆分百分比雪花拆分表 A 的整数列的主要内容,如果未能解决你的问题,请参考以下文章

对星型模型和雪花模型的简单理解

C#将一个excel工作表根据指定范围拆分为多个excel文件

Oracle数据库大数据量表如何优化?

SQL语句拆分表中内容,并变成两列

SQL - 根据列的内容拆分表

根据每行列的内容将一个大表拆分为多个表