有表 如下 name     type    num
张三     门前     5
张三     现场     4
张三     其他     3
李四     门前     5
李四     现场     6
李四     汽修     7
李四     其他     2
想通过一条sql语句 得到如下的表:name     门前     现场    汽修     其他
张三       5        4       0        3
李四       5        6       7        2
请各位高手指教,不胜感激!!!

解决方案 »

  1.   

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

  2.   

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

  3.   

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