现有数据表
ID 项目编号 生产完成状态
---------------------------
1 0001 已完成
2 0002 已完成
3 0001 已完成
4 0002 未完成
5 0003 已完成
6 0003 未完成
7 0001 未完成
8 0001 已完成
9 0003 已完成
10 0001 已完成
-----------------------------SELECT 项目编号,COUNT(项目编号) as 计划数, COUNT(生产完成状态 = 已完成) as 生产完成数, 完成百分比 from 数据表 group by 项目编号其中 生产完成数 和 完成百分比 怎么得出来???使用 (select count(生产完成状态) from 数据表 where 生产完成状态 = ‘已完成’)as 生产完成数 代替 COUNT(生产完成状态 = 已完成) 后得到的表中对应“生产完成状态”一列的汇总数为“数据表”中全部符合条件的数据汇总希望得出的格式为项目编号 | 计划数量 | 生产完成数量 | 完成百分比
------------------------------------------------------
0001 5 4 80%高手指教,使用的是.net程序 access 数据库 ,使用sql查询我该如何实现
ID 项目编号 生产完成状态
---------------------------
1 0001 已完成
2 0002 已完成
3 0001 已完成
4 0002 未完成
5 0003 已完成
6 0003 未完成
7 0001 未完成
8 0001 已完成
9 0003 已完成
10 0001 已完成
-----------------------------SELECT 项目编号,COUNT(项目编号) as 计划数, COUNT(生产完成状态 = 已完成) as 生产完成数, 完成百分比 from 数据表 group by 项目编号其中 生产完成数 和 完成百分比 怎么得出来???使用 (select count(生产完成状态) from 数据表 where 生产完成状态 = ‘已完成’)as 生产完成数 代替 COUNT(生产完成状态 = 已完成) 后得到的表中对应“生产完成状态”一列的汇总数为“数据表”中全部符合条件的数据汇总希望得出的格式为项目编号 | 计划数量 | 生产完成数量 | 完成百分比
------------------------------------------------------
0001 5 4 80%高手指教,使用的是.net程序 access 数据库 ,使用sql查询我该如何实现
解决方案 »
- sql server 2000/2005 每秒处理数据量
- SQL2000数据库突然增大是什么原因?
- SQL存储过程 遇到1个问题
- 2005 中怎样将sysusers 更改
- sql server数据库定时自动备份
- 怎样使触发器在执行特定的update语句是被触发?
- SQL Server 2000 在企业管理器中创建全文索引,可在“工具”菜单上“全文索引”是灰色的,不能用啊~~哪们兄弟知道是怎么回事啊??
- 在sqlserver中怎么可以查看一个数据库中所有表之间的关系???
- 求救!!!
- 哪里有SQL Sever2000的书籍下载!
- 数据库中已存在名为**的对象,存储过程中
- 高手进来看看,遇到面试难题
SELECT
a.项目编号,
COUNT(a.项目编号) AS 计划数,
SUM(
CASE 生产完成状态
WHEN '未完成' THEN 0
WHEN '已完成' THEN 1
END
) AS 生产完成数 ,
CAST(
1.0 * SUM(
CASE 生产完成状态
WHEN '未完成' THEN 0
WHEN '已完成' THEN 1
END
) / COUNT(a.项目编号) AS CHAR) + '%'FROM 数据表 AS a GROUP BY a.项目编号这是SQL Server的,不知道Access行不行。百分比的部分没加截断处理,应该难不倒你。
不过用了CASE,估计运行速度会慢
运行结果是这样
CREATE TABLE 数据表(Id DECIMAL , 项目编号 NVARCHAR(10),生产完成状态 NVARCHAR(10))INSERT INTO 数据表
VALUES(1,'00001','已完成')INSERT INTO 数据表
VALUES(2,'00001','已完成')INSERT INTO 数据表
VALUES(3,'00001','已完成')INSERT INTO 数据表
VALUES(4,'00001','已完成')INSERT INTO 数据表
VALUES(5,'00001','未完成')INSERT INTO 数据表
VALUES(6,'00002','已完成')INSERT INTO 数据表
VALUES(7,'00002','未完成')项目编号 计划数 生产完成数
---------- ----------- ----------- -------------------------------
00001 5 4 0.800000000000 %
00002 2 1 0.500000000000 %(2 行受影响)
计划数量 = count(1) ,
生产完成数量 = (select count(1) from tb where 项目编号 = t.项目编号 and 生产完成状态 = '已完成') ,
完成百分比 = cast((select count(1) from tb where 项目编号 = t.项目编号 and 生产完成状态 = '已完成') * 100.00/count(1) as decimal(18,2))
from tb
group by 项目编号
insert into tb values(1 , '0001', '已完成')
insert into tb values(2 , '0002', '已完成')
insert into tb values(3 , '0001', '已完成')
insert into tb values(4 , '0002', '未完成')
insert into tb values(5 , '0003', '已完成')
insert into tb values(6 , '0003', '未完成')
insert into tb values(7 , '0001', '未完成')
insert into tb values(8 , '0001', '已完成')
insert into tb values(9 , '0003', '已完成')
insert into tb values(10, '0001', '已完成')
goselect 项目编号 ,
计划数量 = count(1) ,
生产完成数量 = (select count(1) from tb where 项目编号 = t.项目编号 and 生产完成状态 = '已完成') ,
完成百分比 = cast((select count(1) from tb where 项目编号 = t.项目编号 and 生产完成状态 = '已完成') * 100.00/count(1) as decimal(18,2))
from tb t
group by 项目编号drop table tb /*
项目编号 计划数量 生产完成数量 完成百分比
---------- ----------- ----------- --------------------
0001 5 4 80.00
0002 2 1 50.00
0003 3 2 66.67(所影响的行数为 3 行)*/
1 在数据库中自动建立具有与统计表结构相同的临时表;
2 然后使用 “insert into 统计表 Select 项目编号,count(1) as 计划数量,count(1)*0 as 生产完成,count(1)*0 as 生产完成率,count(1)*0 as 安装完成,count(1)*0 as 安装完成率 From 数据来源表 group by 项目编号”来初始化统计表;
3 最后使用 Update 循环更新。
虽然效率低但也还可以忍受,呵呵,暂时就先这么解决,大家要是有好的方法,希望能教教我啊,再等几天没有新方法的话就结贴了,先谢谢大家。
a.项目编号,
COUNT(a.项目编号) AS 计划数,
SUM( IIF(生产完成状态='未完成',0,1 ) ) AS 生产完成数 ,
CAST(1.0 * SUM( IIF(生产完成状态='未完成',0,1) ) / COUNT(a.项目编号) AS CHAR) + '%'
FROM 数据表 AS a
GROUP BY a.项目编号
这个方法在Access中可以实现,谢谢了,也谢谢以上各位的帮助,没说的,结贴给分^_^