有表 如下 name     type   
张三     门前     
张三     门前     
张三     门前     
张三     现场     
张三     现场     
张三     现场     
张三     其他    
张三     其他    
张三     其他    
李四     门前    
李四     门前    
李四     门前    
李四     门前    
李四     现场   
李四     现场   
李四     汽修    
李四     其他    
想通过一条sql语句 得到如下的表:name     门前     现场    汽修     其他
张三       3        3       0        3
李四       4        2       1        1
请各位高手指教,不胜感激!!!
注:能否少用 嵌套???

解决方案 »

  1.   

    select name,
    门前=sum(case when type='门前' then 1 else 0 end),
    现场=sum(case when type='现场' then 1 else 0 end),
    汽修=sum(case when type='汽修' then 1 else 0 end),
    其他=sum(case when type='其他' then 1 else 0 end)
    from tb 
    group by name
      

  2.   

    select name,sum(case when type='门前' then 1 else 0 end) as 门前,
                sum(case when type=' 现场' then 1 else 0 end) as  现场 ,
                sum(case when type='  汽修' then 1 else 0 end) as    汽修 ,
                sum(case when type=' 其他' then 1 else 0 end) as  其他 
    from tablename 
    group by name
      

  3.   

    动态可用这个
    declare @strsql varchar(8000)
    select @strsql = ''
    select @strsql = @strsql+',sum(case type when '''+type+''' then 1 else 0 end) '+type  from 表 group by type
    exec('select name,'+@strsql+' from 表 group by name ')
      

  4.   

    select name ,case when  type='门前' then count(type) end as   门前 , 
    case when  type='现场' then count(type) end  as 现场, 
    case when  type='汽修' then count(type) end as 汽修, 
    case when  type='其他' then count(type) end as 其他 
    from table 
    group by name