原始表单的结构如下:
姓名     品牌      购买时间
张三     IBM      2005
张三     HP       2008
张三     联想      2003
李四     华硕      2001
李四     IBM      2005
李四     IBM      2009
李四     IBM      2009
赵五     华硕      2005
陈留     IBM      2007
......
现在我想统计出每个人所购买的笔记本电脑的数目以及他们是否购买过IBM笔记本电脑(0没有,1有)
就是这样:
姓名    购买总量   是否IBM客户
张三     3           1
李四     4           1
......请教各位这样我该怎么用sql语句实现?小弟新手,希望大家指点!

解决方案 »

  1.   

    select 姓名 , count(*) 购买总量 , (select count(*) from tb where 品牌 = 'IBM' and 姓名 = t.姓名) 是否IBM客户 from tb t group by 姓名
      

  2.   

    create table tb(姓名 varchar(10),   品牌 varchar(10),     购买时间 int)
    insert into tb values('张三' ,   'IBM'      , 2005 )
    insert into tb values('张三' ,   'HP'       , 2008 )
    insert into tb values('张三' ,   '联想'     , 2003 )
    insert into tb values('李四' ,   '华硕'     , 2001 )
    insert into tb values('李四' ,   'IBM'      , 2005 )
    insert into tb values('李四' ,   'IBM'      , 2009 )
    insert into tb values('李四' ,   'IBM'      , 2009 )
    insert into tb values('赵五' ,   '华硕'     , 2005 )
    insert into tb values('陈留' ,   'IBM'      , 2007 )
    goselect 姓名 , count(*) 购买总量 , (select count(*) from tb where 品牌 = 'IBM' and 姓名 = t.姓名) 是否IBM客户 from tb t group by 姓名drop table tb/*
    姓名         购买总量        是否IBM客户     
    ---------- ----------- ----------- 
    陈留         1           1
    李四         4           3
    张三         3           1
    赵五         1           0(所影响的行数为 4 行)*/
      

  3.   

    多谢多谢,不过我想要的最后一个是否IBM客户是用0或者1来表示买或者没有买就好了,不用统计购买量,那该怎么办呢?
      

  4.   


    create table tb(姓名 varchar(10),   品牌 varchar(10),     购买时间 int)
    insert into tb values('张三' ,   'IBM'      , 2005 )
    insert into tb values('张三' ,   'HP'       , 2008 )
    insert into tb values('张三' ,   '联想'     , 2003 )
    insert into tb values('李四' ,   '华硕'     , 2001 )
    insert into tb values('李四' ,   'IBM'      , 2005 )
    insert into tb values('李四' ,   'IBM'      , 2009 )
    insert into tb values('李四' ,   'IBM'      , 2009 )
    insert into tb values('赵五' ,   '华硕'     , 2005 )
    insert into tb values('陈留' ,   'IBM'      , 2007 )
    goselect 姓名 , 
           count(*) 购买总量 , 
           case when exists(select 1 from tb where 品牌 = 'IBM' and 姓名 = t.姓名) then 1 else 0 end 是否IBM客户 
    from tb t group by 姓名drop table tb/*
    姓名         购买总量        是否IBM客户     
    ---------- ----------- ----------- 
    陈留         1           1
    李四         4           1
    张三         3           1
    赵五         1           0(所影响的行数为 4 行)
    */
      

  5.   

    再多问一句dawugui,为什么case when exists(select 1 from tb where 品牌 = 'IBM' and 姓名 = t.姓名) then 1 else 0 end 是否IBM客户 
    from tb t group by 姓名
    这句里面姓名=t.姓名,前面这个t.是什么意思?from tb t这里为什么tb后要加个t