注册 登录
编程论坛 SQL Server论坛

求助,多项数据统计。谢谢

梦风随缘 发布于 2010-01-10 21:54, 1193 次点击
表一


新旧表         生产厂家      合格     

新表           A             是
新表           B              否
旧表           C             是
新表           D               是
旧表           B             否
新表           C             是
旧表           D             否

表二

生产厂家    合计    旧表    新表    合格   不合格    合格率

A           1        0        1       1      0          100
B           2        1        1       0      2           0
C           2        1        1       2      0          100
D           2        1        1       1       1         50

如何从第一个表中统计出第二个表的数据,谢谢

[ 本帖最后由 梦风随缘 于 2010-1-11 12:38 编辑 ]
10 回复
#2
happynight2010-01-11 09:11
你这是一个典型的交叉表问题 你可以搜索下 自己试下下 不行的话再发上来帮你写
另外你的合格率是怎么计算的 看不懂
#3
梦风随缘2010-01-11 12:40
合格率我写错了,计算方式是  (合格数/合计)*100%  ,我自己再写写试试
#4
梦风随缘2010-01-11 13:01
select 生产厂家,count(生产厂家) as 合计,SUM(CASE 新旧表 WHEN '旧表' THEN 1 ELSE 0 END) as 旧表,
SUM(CASE 新旧表 WHEN '新表' THEN 1 ELSE 0 END) as 新表,(SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END) /count(生产厂家) ) as 合格率 from 基础信息 group by 生产厂家


这样写不对吧
#5
happynight2010-01-11 13:51
回复 4楼 梦风随缘
应该可以的 你测试下
#6
梦风随缘2010-01-11 13:53
我测了,不对
#7
happynight2010-01-11 13:58
语句从语法上来看是应该没什么问题的
你测试是语法出错还是统计的结果不理想
如果是统计的结果不理想  发一部分数据 和你想要的结果上来
#8
梦风随缘2010-01-11 20:17
表一  
只有本站会员才能查看附件,请 登录
新旧表----检测结果是字段

要根据上面的数据 生成下面的统计数据   
只有本站会员才能查看附件,请 登录


我编写的语句是
select 生产厂家,count(生产厂家) as 合计,SUM(CASE 新旧表 WHEN '旧表' THEN 1 ELSE 0 END) as 旧表,
SUM(CASE 新旧表 WHEN '新表' THEN 1 ELSE 0 END) as 新表,SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END) as 合格,SUM(CASE 检测结果 WHEN '否' THEN 1 ELSE 0 END) as 不合格,(SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END) /count(生产厂家) ) as 合格率 from 基础信息 group by 生产厂家  

然而生成的是
只有本站会员才能查看附件,请 登录


运行过程中没有显示错误。但合格率全是0,而且下面的汇总的不会写语句,希望高手指点一下,谢谢了
#9
happynight2010-01-12 08:57
CREATE TABLE #ls1(新旧表 VARCHAR(10),生产厂家 VARCHAR(15),检测结果 VARCHAR(10))

INSERT INTO #ls1 VALUES('新表','苍南','否')
INSERT INTO #ls1 VALUES('旧表','天信','是')
INSERT INTO #ls1 VALUES('新表','天津五厂','否')
INSERT INTO #ls1 VALUES('旧表','苍南','否')
INSERT INTO #ls1 VALUES('新表','罗托克','是')
INSERT INTO #ls1 VALUES('旧表','苍南','是')
INSERT INTO #ls1 VALUES('新表','天信','否')
INSERT INTO #ls1 VALUES('旧表','罗托克','否')
SELECT * FROM #LS1


SELECT 生产厂家,count(生产厂家) as 合计,SUM(CASE 新旧表 WHEN '新表' THEN 1 ELSE 0 END) as 新表,
SUM(CASE 新旧表 WHEN '旧表' THEN 1 ELSE 0 END) as 旧表,
SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END) as 合格,SUM(CASE 检测结果 WHEN '否' THEN 1 ELSE 0 END) as 不合格
--,(SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END)/count(生产厂家) ) as 合格率
,SUM(CASE 检测结果 WHEN '是' THEN 1.0 ELSE 0.0 END)/count(生产厂家)
from #LS1 group by 生产厂家  
UNION
SELECT '合计' 生产厂家,count(生产厂家) as 合计,SUM(CASE 新旧表 WHEN '新表' THEN 1 ELSE 0 END) as 新表,
SUM(CASE 新旧表 WHEN '旧表' THEN 1 ELSE 0 END) as 旧表,
SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END) as 合格,SUM(CASE 检测结果 WHEN '否' THEN 1 ELSE 0 END) as 不合格
--,(SUM(CASE 检测结果 WHEN '是' THEN 1 ELSE 0 END)/count(生产厂家) ) as 合格率
,SUM(CASE 检测结果 WHEN '是' THEN 1.0 ELSE 0.0 END)/count(生产厂家)
from #LS1

DROP TABLE #ls1
根据你提供的数据 得到的结果与你上面的结果有出入
你合格率计算是两个整数进行运算 返回的也是整数所以会有此问题
#10
梦风随缘2010-01-14 10:18
提示 “列名 生产厂家 无效 啊”
#11
happynight2010-01-18 22:56
你把我所有的代码都COPY后应该不会有这个问题的
1