学号         成绩
199801001  85
199801002          76
199801003          98
199801004          54
199801005         39
199801006          61用一句sql语句查询出以下结果(是一句sql语句)及格否       人员数
及格           4
不及格         2

解决方案 »

  1.   

    select '及格' as 及格否,count(1) as 人员数 from tb where 成绩>=60
    union all
    select '不及格' as 及格否,count(1) as 人员数 from tb where 成绩<60这样算不算一句sql?
      

  2.   

    create table #tb1
    ( 学号   bigint,
      成绩  int)
    insert #tb1
    select 199801001,85 union all
    select 199801002,76  union all
    select 199801003,98  union all
    select 199801004,54  union all
    select 199801005,39  union all
    select 199801006,61 select case when 成绩<60 then '不及格' else '及格' end as 及格否,count(*) as 人员数
    from #tb1
    group by case when 成绩<60 then '不及格' else '及格' end 及格否            人员数
    ------ -----------
    不及格              2
    及格               4(2 行受影响)
      

  3.   

    create table tb2
    ( 学号   bigint,
      成绩  int)
    insert tb2
    select 199801001,85 union all
    select 199801002,76  union all
    select 199801003,98  union all
    select 199801004,54  union all
    select 199801005,39  union all
    select 199801006,61 
    go
    select 及格否,
    人员数=COUNT(*)
    from (
    select 成绩,case when 成绩<60 then N'不及格' else N'及格' end as 及格否
    from tb2) k
    group by 及格否
    /*
    及格否  人员数
    ---- -----------
    不及格  2
    及格   4*/
      

  4.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-03-10 19:12:28
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#TB
    if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB([学号] int,[成绩] int)
    insert #TB
    select 199801001,85 union all
    select 199801002,76 union all
    select 199801003,98 union all
    select 199801004,54 union all
    select 199801005,39 union all
    select 199801006,61
    --------------开始查询--------------------------select CASE WHEN 成绩>=60 THEN '及格' ELSE '不及格' END,COUNT(1)  from #TBGROUP BY CASE WHEN 成绩>=60 THEN '及格' ELSE '不及格' END
    ----------------结果----------------------------
    /* (所影响的行数为 6 行)                   
    ------ ----------- 
    不及格    2
    及格     4(所影响的行数为 2 行)
    */
      

  5.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2010-03-10 19:22:09
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([学号] int,[成绩] int)
    insert [tb]
    select 199801001,85 union all
    select 199801002,76 union all
    select 199801003,98 union all
    select 199801004,54 union all
    select 199801005,39 union all
    select 199801006,61
    --------------开始查询--------------------------
    select
     及格否,count(1) as 人员数
    from 
     (
      select 成绩,case when 成绩<60 then '不及格' else '及格' end as 及格否 from tb)t
    group by
     及格否----------------结果----------------------------
    /* 及格否    人员数
    ------ -----------
    不及格    2
    及格     4(2 行受影响)
    */