表结构如下编号  录入数量
103 2
101 5
111 6
178 7
179 9
144
156
177
157
521 统计出总的编号有几个,统计出多少编号有录入数量,安成百分之多少。
想的结果
 比如
总的编号数   有录入数据的编号数   安成百分之
   100             5              5%

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- 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%
    */
      

  2.   

    select 
      count(*) as 总的编号数,
      count(录入数量) as 有录入数据的编号数,
      ltrim(cast(count(录入数量)*100.0/count(*) as dec(18,2)))+'%' as 完成百分比
    from 
      tb
      

  3.   


    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]
      

  4.   

    3456 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] 有录入数据的编号数 没有去除复的,统计出来的 有录入数据的编号数 和百分比不对
      

  5.   

    ----------------------------------------------------------------
    -- 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%
    */
      

  6.   


    服务器: 消息 156,级别 15,状态 1,行 11
    在关键字 'WITH' 附近有语法错误。我的数据库是SQL2000的
      

  7.   


    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
      

  8.   


    我修该了一下,去除重复的,可是 完成百分比 不对了,那里错了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
      

  9.   

    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 (f#))