SQL Pivot Table查询出现Varchar转Int转换错误,该如何解决?
问题根因
报错的核心原因是你在SQL中添加了完全不符合字段属性的类型转换逻辑:
- 你的
Account number(SQL中对应AccountID)字段本身是varchar(16)类型,存储了包含字母的非纯数字值(比如报错信息中的URXQ14GBTHQJ),根本无法转换为INT类型,转换操作直接触发报错 - 你的Team ID字段是varchar(9)类型,你要透视的维度值是
[A]、[B]字符串,强行将Team转成INT类型后,完全无法匹配PIVOT子句中写的字符串维度值,逻辑完全错位
修正后的SQL写法
你不需要做任何多余的CAST转INT操作,直接保留原始varchar类型即可完成透视,SQL Server的MAX聚合函数支持对字符串类型做聚合处理:
SELECT AccountID, [A] AS 团队A对应账号, [B] AS 团队B对应账号 FROM ( SELECT AccountID, Team FROM dbo.Client_Download ) AS SourceTable PIVOT ( MAX(AccountID) FOR Team IN ([A],[B]) ) AS CvgPivot
可选优化方案
如果你只需要按账号维度展示该账号是否归属对应团队,不需要重复展示账号值,可以调整聚合逻辑为计数,可读性更强:
SELECT AccountID, ISNULL([A],0) AS 是否归属A团队, ISNULL([B],0) AS 是否归属B团队 FROM ( SELECT AccountID, Team FROM dbo.Client_Download ) AS SourceTable PIVOT ( COUNT(1) FOR Team IN ([A],[B]) ) AS CvgPivot
内容的提问来源于stack exchange,提问作者Carlos80
相关产品推荐
相关产品推荐

