SQL用交叉报表时报错:在将 varchar 值 'then result else 0 end)' 转换成数据类型 int 时失败。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL用交叉报表时报错:在将 varchar 值 'then result else 0 end)' 转换成数据类型 int 时失败。相关的知识,希望对你有一定的参考价值。

有表如图一,当然这是做的测试表,正式的表很大,日期牵扯也很多,我需要把横行转为竖行。用如下语句得到的结果如图二,select 商品名,商品规格,max(case when 日期='2017-03-01' then 数量 else 0 end ) as '2017-03-01',max(case when 日期='2017-03-02' then 数量 else 0 end ) as '2017-03-02',max(case when 日期='2017-03-03' then 数量 else 0 end ) as '2017-03-03',max(case when 日期='2017-03-04' then 数量 else 0 end ) as '2017-03-04'from tgroup by商品名,商品规格用这种方法有2个问题,第一是日期太多这样写太繁琐,第二是显示出来的数量只有某一条记录的数据,不是求和,所以我想用交叉报表,但是我又不会用交叉表,所以在这里求代码,只要能让这个例子实现显示两个条件就可以了1、显示出的数量 ,是商品a 规格 a-01 在 2017-03-01 这天卖出的数量和2、由于日期较多,所以用交叉表我自己做的交叉表老是报错,还查不出来是哪里的错……报错内容:在将 varchar 值 'then result else 0 end)' 转换成数据类型 int 时失败。我用的语句是declare @sql varchar(8000)set @sql='select 商品名,商品规格'select @sql=@sql+',max(case 数量 when '+ 数量+ 'then result else 0 end)'+数量from (select distinct 数量 from t) as 商品名set @sql=@sql+'from t group by 商品名'exec(@sql)

我晕....这代码好乱
你定义的@sql在赋值的时候, 没有对单引号进行转义, 所以整个字符串是断开的
把SQL语句中要用到的单引号, 使用两个连续的单引号进行转义追问

我之前是用连续单引号转yi的,也是会报这个错

追答

你拼接完@sql变量以后, 使用 print @sql 把内容打印出来, 然后再复制打印的内容, 直接执行以下看看有没有错误

追问

我用下面的句子
set @sql=@sql + ',sum(case 数量 when '''+ '数量'+ ''' then result else 0 end) as '+'数量'
print @sql
输出结果是:select 商品名,商品规格,sum(case 数量 when '数量' then result else 0 end) as 数量

追答

你这个不应该是个数字吗?

追问

应该是数字,我只用set 赋值的时候没法直接引数字,就给数量字段加了引号

最后的数量也是这样

追答

综合你上面的错误, 如果确定拼接出来的@sql没有语法错误的话, 看看你的那个'数量' 有没有可能是NULL值, 如果是NULL的话, '数量' 就变成两个单引号了, 会被转义成一个单引号, 然后使得后面的then result else 0 end) 变成一个字符串值

追问

数量在原始表中不存在空值,如果转成横版以后是有空值的。还存在相同日期多个数量求和的情况

参考技术A transform sum(表名.数量) as 数量之合计 select 表名.商品名 from 表名 group by 表名.商品名 pivot 表名.日期;追答

这里不能把商品规格弄进来,否则就不能按日求和了

追问

transform 可以在SQL里用么 为什么我用着就是错误呢……我这边需要用sql语句来实现这个,其他的软件不认……

追答

你电脑要是有access,建一个最基本的样表和这个查询,转移到sql server

我一下也想不出sql server 该怎么写了。实在不行就用access混着用吧,以解决需要为主

好像不固定列的转置都很麻烦

C#生成excel到其他电脑生成报表时报错

  技术分享

  错误:在本机编译过程中没有出现错误,程序能够执行。Copy出编译程序以及所需要的一些Dll文件,放在另一台机子上出现以下错误
System.InvalidCastException: Unable to cast COM object of type ‘Microsoft.Office.Interop.Excel.ApplicationClass‘ to interface type ‘Microsoft.Office.Interop.Excel._Application‘. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{000208D5-0000-0000-C000-000000000046}‘ failed due to the following error: 不支持此接口 (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

  技术分享

 

 

  解决方案:可能是报错的电脑office软件不匹配,遂下载了现在比较常用的wps装上,重新运行生成excel成功。

  这是在win64位系统3台电脑上运行,如果在win32位可能会出现其他问题,后续跟进。

以上是关于SQL用交叉报表时报错:在将 varchar 值 'then result else 0 end)' 转换成数据类型 int 时失败。的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu cmake交叉编译时报错:没有那个文件或目录

交叉报表sql语句使用

灵活数据源的固定行列交叉报表的制作

用PL/SQL工具连接Oracle数据库的时报错:ORA-12638: 身份证明检索失败的解决方法

连接sqlserver数据库时报错,请问怎么解决

sql server 2008 注册升级时报错