我有这么一个表
ID       TIME            DATABAE       RECORD   USERT    LATETIME        TYPE
1 20071023:100350 国图书目库 1 root 20070405 修改
2 20071009:120947 国图书目库 8 root 20070612 删除
3 20071009:165136 国图书目库 6 root 20070824 原编我用什么语句把他变成这样的用户   原编  修改 删除
root   1    1    1
就是想统计一下类型的个数

解决方案 »

  1.   

    select USERT,
      sum(case TYPE when '原编' then 1 else 0 end) 原编,
      sum(case TYPE when '修改' then 1 else 0 end) 修改,
      sum(case TYPE when '删除' then 1 else 0 end) 删除
    from tb 
    group by usert
      

  2.   

    create table tb(ID int,TIME varchar(20),DATABAE varchar(20),RECORD int,USERT varchar(10),LATETIME varchar(10),TYPE varchar(10))
    insert into tb values(1, '20071023:100350', '国图书目库', 1, 'root', '20070405', '修改') 
    insert into tb values(2, '20071009:120947', '国图书目库', 8, 'root', '20070612', '删除') 
    insert into tb values(3, '20071009:165136', '国图书目库', 6, 'root', '20070824', '原编') 
    go--静态SQL,指type只有这三项
    select USERT, 
      sum(case TYPE when  '原编 ' then 1 else 0 end) 原编, 
      sum(case TYPE when  '修改 ' then 1 else 0 end) 修改, 
      sum(case TYPE when  '删除 ' then 1 else 0 end) 删除 
    from tb  
    group by usert 
    /*
    USERT      原编          修改          删除          
    ---------- ----------- ----------- ----------- 
    root       1           1           1(所影响的行数为 1 行)
    */
    --动态SQL,指TYPE不只这三项
    declare @sql varchar(8000)
    set @sql = 'select USERT'
    select @sql = @sql + ' , sum(case type when ''' + type + ''' then 1 else 0 end) [' + type + ']'
    from (select distinct type from tb) as a
    set @sql = @sql + ' from tb group by  USERT'
    exec(@sql) 
    /*
    USERT      删除          修改          原编          
    ---------- ----------- ----------- ----------- 
    root       1           1           1
    */drop table tb