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

:存储过程实现统计分析

2012-01-06 
在线等:求助:存储过程实现统计分析,表1(设备信息表):DevNoApartDevnameDevModelprice1车间1机床III型30002

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

[解决办法]
Declare @S1 varchar(800),@S2 varchar(8000)
Select @S1= ' ',@S2= ' '
Select @S1=@S1+ ',[ ' + Devname + ']=Sum(Case When Devname= ' ' ' + Devname + ' ' ' Then 1 Else 0 END) ' From 设备名称表
Select @S2= 'SELECT Apart ' + @S1 + ' FROM 设备信息表 GROUP BY Apart '
EXEC(@S2)

--如果设备名称表中的设置并不是完全存在于设备信息表中的,则可以将此语句修改为:
Select @S1=@S1+ ',[ ' + Devname + ']=Sum(Case When Devname= ' ' ' + Devname + ' ' ' Then 1 Else 0 END) ' From (SELECT DISTINCT Devname FROM 设备信息表) TAB

[解决办法]

使用第一种方法,可能会出现统计数量全部是0的现象;
当然如果设备名称表中的设备已经全部存在于设备信息表中的话,使用第一种方法会更高效一些

热点排行