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

动态SELECT语句中CONCAT失效,需仅在Factory Total行后添加%符号

解决动态SELECT查询中CONCAT导致的类型转换错误

问题根源

报错Conversion failed when converting the varchar value '820%' to data type int的核心原因是UNION ALL合并的两个结果集数据类型不匹配:

  • 第一个子查询里,ISNULL(Sum(PlanProduction),0)返回的是整数类型
  • 第二个子查询用Concat(Sum(PlanProduction),'%')返回的是字符串类型
    SQL会自动尝试将字符串转换为整数,但带%的字符串无法完成转换,因此触发错误。

解决方案

把第一个子查询的结果也转换为字符串类型,确保UNION ALL两边的other_columns列类型一致,再在"zFactory Total"行拼接%符号。

修改后的完整代码

DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX) 

SET @cols = 
    STUFF(
                (SELECT distinct ',' + quotename([date]) 
                FROM Table_1 
                WHERE Date between '20230101' and '20230828'
                FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
set @query = 'select LineName, ' + @cols + 
                ' from (select LineName,[date],CAST(ISNULL(Sum(PlanProduction),0) AS VARCHAR(20)) other_columns 
                    from Table_17Q group by LineName, [date] 
                    UNION ALL SELECT ''zFactory Total'',date, Concat(Sum(PlanProduction),''%'') other_columns from 
                    Table_1 group by LineName, [date]
                    ) 
                        x pivot (max(other_columns) for [date] in (' + @cols 
                + ')) p Order by LineName'  ;
 execute( @query)

补充说明

如果需要让非"zFactory Total"行保持数字格式展示,也可以在最终查询阶段再做格式处理,但必须保证UNION ALL的两个结果集列数据类型完全一致,否则必然触发类型转换错误。

内容的提问来源于stack exchange,提问作者Computer knowledge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:03