gpt4 book ai didi

pivot - 雪花脱节

转载 作者:行者123 更新时间:2023-12-04 09:41:27 25 4
gpt4 key购买 nike

我需要转置一个表,其中 column1 是实体的名称,column2 到 column366 是一年中包含美元金额的日期。表,select语句,输出结果都给了
以下 -

问题 - 此语法要求我创建一个逗号分隔的列列表 - 基本上是 365 个日期 - 并在 select 语句的 IN 子句中使用该列表。

像这样 -

.....unpivot(现金( "1-1-2020", "1-2-2020", "1-3-2020"........."12- 31-2020" )) 按 2 订购

有没有更好的方法来做到这一点?喜欢正则表达式?我不想在 中输入 365 个日期mm-dd-yyyy 格式化并为我的麻烦获取心皮隧道

这是表格 - 第一行是列标题,第二行是分隔符。第 3、4、5 行是样本数据。

Name                  01-01-2020            01-02-2020          01-03-2020           12-31-2020
---------------------------------------------------------------------------------------------------
Entity1 10.00 15.75 20.00 100.00
Entity2 11.00 16.75 20.00 10.00
Entity3 112.00 166.75 29.00 108.00

我可以使用下面的 select 语句转置它

从表1中选择*
unpivot(现金在 ("1-1-2020", "1-2-2020", "1-3-2020") 中的日期)按 2 排序

获得如下所示的输出 -
    Name-------------------dates-----------------------cash
--------------------------------------------------------------
Entity1 01-01-2020 10.00
Entity2 01-01-2020 11.00
Entity3 01-01-2020 112.00

...............................
.............................
.........
and so on

最佳答案

在没有 PIVOT 的情况下,有一种更简单的方法可以做到这一点。 Snowflake 为您提供了一个将整行表示为“对象”的函数——键值对的集合。使用这种表示,您可以将每个元素平展并提取列名(键 == 日期)和其中的值(值 == 现金)。这是一个可以做到这一点的查询:

with obj as (
select OBJECT_CONSTRUCT(*) o from Table1
)
select o:NAME::varchar as name,
f.key::date as date,
f.value::float as cash
from obj,
lateral flatten (input => obj.o, mode => 'OBJECT') f
where f.key != 'NAME'
;

关于pivot - 雪花脱节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62311671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com