在线等:求助:存储过程实现统计分析,
表1(设备信息表): 
 DevNo   Apart   Devname      DevModel   price 
 1               车间1      机床            III型         3000 
 2               车间2      机床               II型         2000 
 3               木工车间      轴承      粗孔型      100   
 表2:(单位信息) 
 ID   Apart 
 1      车间1 
 2      车间2 
 3      车间3 
 4      木工车间 
 5      。。。 
 表3      (设备名称表) 
 ID      DevName 
 1         机床 
 2         车床 
 3         轴承 
 4         。。。   
 现在要实现这样的统计: 
 Apart            DevName1(车床)      DevName2(机床)      DevName3(轴承) 
 车间1                  车床数                                       机床数                                                轴承数 
 车间2                  车床数                                       机床数                                                轴承数 
 车间3                  车床数                                       机床数                                                轴承数 
 木工车间         车床数                                       机床数                                                轴承数 
------解决方案--------------------表1...........t1 
 表2...........t2   
 select t2.Apart, sum(case when t1.DevName= '机床 ' then 1 else 0 end) as  'DevName1(车床) ', 
 	sum(case when t1.DevName= '车床 ' then 1 else 0 end)as  'DevName2(车床) ', 
 	sum(case when t1.DevName= '轴承 ' then 1 else 0 end)as  'DevName3(车床) ' 
 from t1 right join t2 on  t1.Apart=t2.Apart 
 group by t2.Apart
------解决方案--------------------DECLARE @SQL VARCHAR(8000)  
 SET @SQL= 'SELECT Apart '  
 SELECT @SQL= @SQL+  ',sum(CASE WHEN Devname =  ' ' ' + Devname +  ' ' ' THEN 1 ELSE 0 END) [ '+Devname+ '] ' FROM (SELECT DISTINCT Devname FROM A) TAB 
 SET @SQL=@SQL+  ' FROM A GROUP BY Apart '  
 EXEC (@SQL)  
------解决方案--------------------变量是不能定义为text类型的
------解决方案--------------------一般没有用你那种格式查询出来的 
 t1(设备信息表) 
 1	车间1	机床	III型	3000 
 2	车间2	机床	II型	2000 
 3	木工车间	轴承	粗孔型	100 
 ------------------------------------------ 
 select Apart,DevName,count(DevNo) as 设备数 from t1 group by Apart,DevName 
 结果: 
 车间1	机床	1 
 车间2	机床	1 
 木工车间	轴承	1 
------解决方案--------------------SELECT @SQL= @SQL+  ',sum(CASE WHEN Devname =  ' ' ' + Devname +  ' ' ' THEN 1 ELSE 0 END) [ '+Devname+ '] ' FROM (SELECT DISTINCT Devname FROM A) TAB     
 可以理解为用SQL中的FOR循环得到语句