UNPIVOT操作报错求助:汇率表列转行失败问题排查
问题分析与解决
第一个SQL语法错误原因及修正
你的第一个UNPIVOT语句语法错误,核心问题是IN子句中的列名没有用括号包裹,Snowflake的UNPIVOT语法要求IN后的列列表必须放在括号内。
修正后的语句:
SELECT CREATION_DATE, CURRENCY, RATE FROM ( SELECT CREATION_DATE, JMD, ISK, COP, USD, EGP, PAB FROM EXCHANGE_RATES) XR UNPIVOT(RATE FOR CURRENCY IN (JMD, ISK, COP, USD, EGP, PAB)) AS U;
第二个SQL的类型冲突错误原因及解决
第二个报错提示COP列类型和其他列冲突,这是因为UNPIVOT要求所有要转换的列必须是相同数据类型。你需要检查COP列的数据类型,确保它和JMD、ISK、USD等列的类型一致(比如都是FLOAT/DECIMAL类型)。
如果类型不一致,可以先在子查询中转换类型,再执行UNPIVOT:
SELECT CREATION_DATE, CURRENCY, RATE FROM ( SELECT CREATION_DATE, JMD, ISK, TRY_CAST(COP AS DECIMAL(18,6)) AS COP, -- 将COP转换为统一数值类型 USD, EGP, PAB FROM EXCHANGE_RATES) XR UNPIVOT(RATE FOR CURRENCY IN (JMD, ISK, COP, USD, EGP, PAB)) AS U;
注:TRY_CAST会在转换失败时返回NULL,若需要严格转换可使用CAST,转换失败会直接报错,根据需求选择即可。
另外,第二个语句里的UNPIVOT(CURRENCY FOR MO (JMD,...))写法逻辑错误,UNPIVOT的正确格式是UNPIVOT(值列 FOR 类别列 IN (列列表)),你写反了值列和类别列,应该把汇率值作为值列,货币代码作为类别列。
内容的提问来源于stack exchange,提问作者C B
相关产品推荐
相关产品推荐

