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

关于SQL交叉表的有关问题,哎,不熟练,没办法,又得了

2013-12-22 
关于SQL交叉表的问题,哎,不熟练,没办法,又得求助了。表结构如下:月份部门代码项目金额111001科室总收入2424

关于SQL交叉表的问题,哎,不熟练,没办法,又得求助了。
表结构如下:
月份     部门代码    项目            金额
111001科室总收入242409.20
211001科室总收入303011.50
311001科室总收入404015.33
411001科室总收入606023.00
511001科室总收入1212046.00
511002科室总收入1356.00
513012科室总收入.00
611009科室总收入855530.00
611034科室总收入7216558.00
611001科室总收入1120644.00
611002科室总收入1217642.00
612004科室总收入331214.00
611003科室总收入991837.00
611005科室总收入630345.00
611006科室总收入1055543.00
611007科室总收入576242.00
611014科室总收入847614.00
611019科室总收入2429983.00
611023科室总收入90982.00
611044科室总收入.00
611027科室总收入1400943.00
620001科室总收入.00
611041科室总收入.00
612001科室总收入5163468.00
612002科室总收入696983.00
611015科室总收入1534202.00
611018科室总收入438646.00
612005科室总收入749946.00
611026科室总收入525745.00
612006科室总收入143015.00
611010科室总收入927181.00
611013科室总收入800345.00
611017科室总收入1048420.00
611020科室总收入562862.00
611021科室总收入720996.00
612007科室总收入2501509.00
611022科室总收入333093.00
612008科室总收入636149.00
612003科室总收入2193790.00
611008科室总收入1186605.00
611029科室总收入700253.00
611004科室总收入4775020.00
611012科室总收入600469.00
611028科室总收入12567251.00
611035科室总收入580154.00
611016科室总收入811066.00
620002科室总收入.00
611030科室总收入493913.00
611011科室总收入938374.00
611043科室总收入.00
611025科室总收入58526.00
611036科室总收入260956.00
611031科室总收入198927.00
611024科室总收入10941.00
611040科室总收入188332.00
611032科室总收入172253.00
611039科室总收入255019.00
711009科室总收入1020969.00
711006科室总收入993231.00
712002科室总收入796202.00
711039科室总收入.00
711001科室总收入1138680.00
711019科室总收入2371643.00
711010科室总收入1008627.00
711012科室总收入977162.00
1011016科室总收入817317.00
1011001科室总收入1080634.00
1012007科室总收入3074318.00
1011007科室总收入718499.00
1012005科室总收入867229.00
1012008科室总收入545411.00
1011024科室总收入9387.00
1011015科室总收入2175253.00
1011012科室总收入721967.00
1011027科室总收入1660378.00
1012003科室总收入2225105.00
1020002科室总收入.00
1011099科室总收入42698.00
1011005科室总收入650769.00
1011009科室总收入1156720.00
1011011科室总收入1081833.00
1011042科室总收入172124.00
1011031科室总收入327077.00
1011025科室总收入87863.00
1011026科室总收入460845.00
1011035科室总收入668370.00
1011006科室总收入1181717.00
1011021科室总收入1024599.00
1011033科室总收入151274.00
1011020科室总收入607292.00
1011029科室总收入872371.00
1011030科室总收入733362.00
1011018科室总收入374863.00
1011014科室总收入916116.00
1012004科室总收入489522.00
1012006科室总收入194965.00
1011039科室总收入169388.00
1011002科室总收入1409396.00
1011013科室总收入798590.00
1011003科室总收入1435611.00
1011017科室总收入750258.00
1012001科室总收入4531785.00
1012002科室总收入877277.00
1011023科室总收入96452.00
1011008科室总收入1324187.00
1011004科室总收入3638173.00
1011036科室总收入320405.00
1011022科室总收入347480.00
1011019科室总收入3100130.00
1011010科室总收入949472.00

月份是int格式的字段

现在想得到下面的结果
部门             1      2       3       4      5     6    7    8    10
11001    242409.20 303011.50
11002
....

月份的排序要按上面。用下面的语句写时,会报错:
服务器: 消息 245,级别 16,状态 1,行 5
将 varchar 值 ''  then ItemValue else 0 end) [' 转换为数据类型为 int 的列时发生语法错误。
不知道怎么解决?求教了

declare @sql varchar(8000)

set @sql = 'select Dept as ' + '部门'

select @sql = @sql + ' , Sum(case Term when '''+Term+'''  then ItemValue else 0 end) ['+ Term +'] '

from (select distinct Term from [2013BonusCalc]) as a

set @sql = @sql + ' from [2013BonusCalc]  group by dept'

exec(@sql)

[解决办法]

引用:
我原来是把月份改为nvarchar格式,结果能出来,但排序后变成:
10  11  12  1 2 3 4 5 6 7 8 9
这样了。


进行排序呢:

declare @sql varchar(8000)

set @sql = 'select Dept as ' + '部门'



select @sql = @sql + ' , Sum(case Term when '''+cast(Term as varchar)+'''  then ItemValue else 0 end) ['+ cast(Term as varchar) +'] '

from (select distinct Term from [2013BonusCalc]) as a
order by Term
set @sql = @sql + ' from [2013BonusCalc]  group by dept'

exec(@sql)

热点排行