首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于SQL 交叉表的有关问题,郁闷好几天了

2013-08-04 
关于SQL 交叉表的问题,郁闷好几天了。表名:szmxb表结构如下:bh部门编号 部门名称xm_Noxm_Name ic_Hzje11110

关于SQL 交叉表的问题,郁闷好几天了。
表名:szmxb
表结构如下:
         bh      部门编号 部门名称  xm_No  xm_Name ic_Hzje
1111001内一科S009心电图150
1111006内二科S001挂号费152
1212008门诊灸疗科S089非药物治疗496
1212032体检办S020化验费1066
1212032体检办S012放射费891
1111003外科S078救护车470
1111001内一科S006彩超费679
1212027门诊收费处S106预收住院单据18
1212032体检办S009心电图25
1212032体检办S005B超费29

这个表是一个视图,是动态生成的,做为交叉表的数据来源,有700多行
生成交叉表的代码如下:

Declare @s Varchar(8000) Set @s='Select bh,部门编号,部门名称 ' 
Select @s=@s+',['+Xm_No+']=Sum(case Xm_No when '''+Xm_No+''' then IC_hzje else 0 end)'  
From szmxb   Group By Xm_No Order By Xm_No 
exec(@s+' From szmxb Group by 部门编号,部门名称,bh  Order By 部门编号 ')

在执行时,提示如下错误:

服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'From' 附近有语法错误。


把该表的行删除一些,却又能执行,不知道是什么原因,还请大侠们指点一下。

数据库备份下载地址:
http://www.zdasoft.cn/update/aaaa.zip

[解决办法]
varchar的最大长度是8000,而我们打印出来什么发现长度只到4048就没有了呢?

原来问题在你的数据设计里 XM_No nvarchar(50)
nvarchar是双字节,最大长度就是4048,因为字符中包含有nvarchar类型,所以只能按nvarchar的最大长度计算

解决你的问题就是把
XM_No nvarchar(50)
改为
XM_No varchar(50)

热点排行