sql-server Snowflake:从PIVOT函数获取要返回的数字时遇到问题

1szpjjfi  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在将查询从SQL Server移动到Snowflake。查询的一部分创建了一个数据透视表。数据透视表部分工作正常(我单独运行了它,它提取了我所期望的数字)。
但是,查询的以下部分依赖于数据透视表-这些部分失败了。一些字段以字符串类型返回。我认为问题是Snowflake在将字符串数据转换为数字数据时遇到问题。我尝试了CAST、TRY_TO_DOUBLE/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)放在单引号和双引号中。

uidvcgyl

uidvcgyl1#

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

ZEROIFNULL(TRY_TO_DOUBLE('Starting Membership'))

这只是试图将字符串文字值Starting Membership转换为双精度型。它将始终为NULL。然后,您的ZEROIFNULL()函数将NULL转换为0(零)。
在没有看到定义列名的查询的其余部分的情况下,我无法为您提供更正,但请尝试在查询中使用字段名,而不是带引号的字符串值,看看这是否满足您的需要。

相关问题