Snowflake:无法从PIVOT函数返回数字



我正在将一个查询从SQL Server移动到Snowflake。查询的一部分创建了一个数据透视表。数据透视表部分运行良好(我已经单独运行了它,它提取了我期望的数字(。

但是,查询的以下部分依赖于透视表,而这些部分会失败。有些字段以字符串类型返回。我认为问题是Snowflake在将字符串数据转换为数字数据时遇到了问题。我试过CAST、TRY_TO_DUBLE/NUMBER,但这些都是0。

我将把代码放在下面,我很感激任何关于我能做什么的见解!

CREATE OR REPLACE TEMP TABLE ATTR_PIVOT_MONTHLY_RATES AS (  
SELECT  
Market,  
Coverage_Mo,  
ZEROIFNULL(TRY_TO_DOUBLE('Starting Membership')) AS Starting_Membership,  
ZEROIFNULL(TRY_TO_DOUBLE('Member Adds')) AS Member_Adds,  
ZEROIFNULL(TRY_TO_DOUBLE('Member Attrition')) AS Member_Attrition,   
((ZEROIFNULL(CAST('Starting Membership' AS FLOAT))
+ ZEROIFNULL(CAST('Member Adds' AS FLOAT))
+ ZEROIFNULL(CAST('Member Attrition' AS FLOAT)))-ZEROIFNULL(CAST('Starting Membership' AS FLOAT)))
/ZEROIFNULL(CAST('Starting Membership' AS FLOAT)) AS "% Change"
FROM
(SELECT * FROM ATTR_PIVOT
WHERE 'Starting Membership' IS NOT NULL) PT)

我意识到这是一个非常大的问题,有很多运动部件。。。所以我的主要问题是:我如何才能成功地将数据类型更改为数值,从而使公式在查询的后半部分起作用?

非常感谢您通读这一切!

编辑以使用不需要的语法缩短查询

CAST((、TRY_TO_DOUBLE((和TRY_TO_NUMBER((。我还将字段(Starting Membership,Member Adds(放在单引号和双引号中。

除非出于某种原因在本文中引用字段名只是为了突出显示它们,否则编写此查询的方式将表明您试图将字符串值强制转换为数字。

例如:

ZEROIFNULL(TRY_TO_DOUBLE('Starting Membership'))

这只是试图将字符串文字值Starting Membership强制转换为双精度。这将始终为NULL。然后你的ZEROIFNULL()函数将你的NULL变成0(零(。

如果没有看到定义列名的查询的其余部分,我就无法为您提供更正,但请尝试在查询中使用字段名,而不是带引号的字符串值,看看这是否能满足您的需要。

您的第一个错误是所有单引号列名都被视为字符串/text/char

示例您的内部选择:

with ATTR_PIVOT(id, studentname) as (
select * from values
(1, 'student_a'),
(1, 'student_b'),
(1, 'student_c'),
(2, 'student_z'),
(2, 'student_a')
)
SELECT * 
FROM ATTR_PIVOT
WHERE 'Starting Membership' IS NOT NULL

不存在";开始会员资格";列,然后我们得到所有的行。。

ID学生姓名
1student_a
1student_b
1student_c
2student_z
2student_a

相关内容

  • 没有找到相关文章

最新更新