表结构如下编号 录入数量
103 2
101 5
111 6
178 7
179 9
144
156
177
157
521 统计出总的编号有几个,统计出多少编号有录入数量,安成百分之多少。
想的结果
比如
总的编号数 有录入数据的编号数 安成百分之
100 5 5%
103 2
101 5
111 6
178 7
179 9
144
156
177
157
521 统计出总的编号有几个,统计出多少编号有录入数量,安成百分之多少。
想的结果
比如
总的编号数 有录入数据的编号数 安成百分之
100 5 5%
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-04-08 22:23:12
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
-- Jun 17 2011 00:57:23
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([编号] int,[录入数量] int)
insert [huang]
select 103,2 union all
select 101,5 union all
select 111,6 union all
select 178,7 union all
select 179,9 union all
select 144,null union all
select 156,null union all
select 177,null union all
select 157,null union all
select 521,null
--------------开始查询--------------------------select COUNT([编号])[编号],SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END )有录入数据的编号数,
CONVERT(VARCHAR(10),
CONVERT(FLOAT,SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END ))/COUNT([编号])*100
)+'%'
from [huang]
----------------结果----------------------------
/*
编号 有录入数据的编号数
----------- ----------- -----------
10 5 50%
*/
count(*) as 总的编号数,
count(录入数量) as 有录入数据的编号数,
ltrim(cast(count(录入数量)*100.0/count(*) as dec(18,2)))+'%' as 完成百分比
from
tb
select COUNT(DISTINCT[编号])[编号],SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END )有录入数据的编号数,
CONVERT(VARCHAR(10),
CONVERT(FLOAT,SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END ))/COUNT(DISTINCT[编号])*100
)+'%'
from [huang]
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-04-08 23:34:27
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
-- Jun 17 2011 00:57:23
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([编号] int,[录入数量] int)
insert [huang]
select 103,2 union all
select 101,5 union all
select 111,6 union all
select 178,7 union all
select 179,9 union all
select 179,null union all
select 178,NULL
--------------开始查询--------------------------
;WITH cte AS (
SELECT [编号],MIN([录入数量]) [录入数量]
FROM huang
GROUP BY [编号],[录入数量])
select COUNT([编号])[编号]
,SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END )有录入数据的编号数,
CONVERT(VARCHAR(10),
CONVERT(FLOAT,SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END ))/COUNT([编号])*100
)+'%' AS [百分比]
from cte----------------结果----------------------------
/*
编号 有录入数据的编号数 百分比
----------- ----------- -----------
7 5 71.4286%
*/
服务器: 消息 156,级别 15,状态 1,行 11
在关键字 'WITH' 附近有语法错误。我的数据库是SQL2000的
SELECT [编号],MIN([录入数量]) [录入数量] into cte
FROM huang
GROUP BY [编号],[录入数量]
go
select COUNT([编号])[编号]
,SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END )有录入数据的编号数,
CONVERT(VARCHAR(10),
CONVERT(FLOAT,SUM(CASE WHEN [录入数量] IS NOT NULL THEN 1 ELSE 0 END ))/COUNT([编号])*100
)+'%' AS [百分比]
from ctedrop table cte
我修该了一下,去除重复的,可是 完成百分比 不对了,那里错了select count(distinct (f#)) as 总的编号数,
count(distinct(fl)) as 有录入数据的编号数,
ltrim(cast(count(distinct(fl))*100.0/count(*) as dec(18,2)))+'%' as 完成百分比 from
nad.pos.dbo.jpftab where b#=100
count(distinct(fl)) as 有录入数据的编号数,
ltrim(cast(count(distinct(fl))*100.0/count(*) as dec(18,2)))+'%' as 完成百分比 from
nad.pos.dbo.jpftab where b#=100
改成 count(distinct (f#))