在线等:求助:存储过程实现统计分析,
表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循环得到语句