日期:2014-05-19  浏览次数:20410 次

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