You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:40:32