我的SQL: SELECT 项目编号, COUNT(项目编号) 检测项数, 合格数 = SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END), 不合格数 = SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN 0 ELSE 0 END), MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(合格数/检测项数) --就是这一行出错:"列名'合格数'无效"FROM 检测结果 GROUP BY 项目编号
select a.项目编号,a.检测项数,isnull(b.合格数,0) 合格数,isnull(c.不合格数,0) 不合格数,b.合格数/a.检测项数 合格率 from (select 项目编号, COUNT(项目编号) 检测项数 FROM 检测结果 GROUP BY 项目编号) a left outer join (select 项目编号,count(*) 合格数 from 检测结果 where 判定结果 = '合格' GROUP BY 项目编号) b on a.项目编号=b.项目编号 left outer join (select 项目编号,count(*) 不合格数 from 检测结果 where 判定结果 = '不合格' GROUP BY 项目编号) c on a.项目编号=c.项目编号
SELECT 项目编号, COUNT(项目编号) 检测项数, SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) 合格数 , SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN 0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(合格数/检测项数) --就是这一行出错:"列名'合格数'无效"FROM 检测结果 GROUP BY 项目编号
SELECT 项目编号, COUNT(项目编号) 检测项数, SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) 合格数 , SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN 0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) /检测项数) FROM 检测结果 GROUP BY 项目编号
SELECT 项目编号, COUNT(项目编号) 检测项数, SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) 合格数 , SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN 0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) /COUNT(项目编号) ) FROM 检测结果 GROUP BY 项目编号
SELECT 项目编号, COUNT(项目编号) 检测项数, SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) 合格数 , SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN 0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) /COUNT(项目编号) 合格率 FROM 检测结果 GROUP BY 项目编号
首先多谢各位的指导 to sky_blue(老衲) : 按你最后这次的SQL,合格率不是0就是1,????to emayongxiang(马) : 你的方法返回跟sky_blue(老衲)一样:合格率不是0就是1,????
转换一下数据类型就可以了 SELECT 项目编号, COUNT(项目编号) 检测项数, SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) 合格数 , SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN 0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,1.00*SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0 ELSE 0 END) /COUNT(项目编号) 合格率 FROM 检测结果 GROUP BY 项目编号
SELECT 项目编号, COUNT(项目编号) 检测项数,
合格数 = SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END),
不合格数 = SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN
0 ELSE 0 END), MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(合格数/检测项数) --就是这一行出错:"列名'合格数'无效"FROM 检测结果
GROUP BY 项目编号
from (select 项目编号, COUNT(项目编号) 检测项数 FROM 检测结果 GROUP BY 项目编号) a
left outer join (select 项目编号,count(*) 合格数 from 检测结果 where 判定结果 = '合格' GROUP BY 项目编号) b
on a.项目编号=b.项目编号
left outer join (select 项目编号,count(*) 不合格数 from 检测结果 where 判定结果 = '不合格' GROUP BY 项目编号) c
on a.项目编号=c.项目编号
SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) 合格数 ,
SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN
0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(合格数/检测项数) --就是这一行出错:"列名'合格数'无效"FROM 检测结果
GROUP BY 项目编号
SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) 合格数 ,
SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN
0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) /检测项数)
FROM 检测结果
GROUP BY 项目编号
SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) 合格数 ,
SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN
0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,合格率=(SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) /COUNT(项目编号) )
FROM 检测结果
GROUP BY 项目编号
SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) 合格数 ,
SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN
0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) /COUNT(项目编号) 合格率
FROM 检测结果
GROUP BY 项目编号
to sky_blue(老衲) :
按你最后这次的SQL,合格率不是0就是1,????to emayongxiang(马) :
你的方法返回跟sky_blue(老衲)一样:合格率不是0就是1,????
SELECT 项目编号, COUNT(项目编号) 检测项数,
SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) 合格数 ,
SUM(CASE WHEN 判定结果 = '不合格' THEN 1 WHEN 判定结果 = '合格' THEN
0 ELSE 0 END) 不合格数 , MIN(检测结果) 最小值, MAX(检测结果) 最大值,1.00*SUM(CASE WHEN 判定结果 = '合格' THEN 1 WHEN 判定结果 = '不合格' THEN 0
ELSE 0 END) /COUNT(项目编号) 合格率
FROM 检测结果
GROUP BY 项目编号