id      name     date      value
1        A       2006年    106
2        A       2007年    107 
3        A       2008年    108
4        B       2006年    106 
5        B       2007年    107
6        B       2008年    108
7        C       2006年    106
8        C       2007年    107
9        C       2008年    108把上面的用select怎么变成下面的那样啊name   2006年    2007年  2008年
A      106       107     108
B      106       107     108
C      106       107     108

解决方案 »

  1.   

    select name,
    sum(if(date='2006年',value,0)) 2006年,
    sum(if(date='2007年',value,0)) 2007年,
    sum(if(date='2008年',value,0)) 2008年
    from mytable 
    group by name;
      

  2.   

    select name ,
    (select a.value from table_name a  where a.data="2006年" and name=b.name) as '2006年',
    (select a1.value from table_name a1 where a.data="2007年" and name=b.name) as '2007年',
    (select a2.value from table_name a2 where a.data="2008年" and name=b.name) as '2008年',
    from table_name b 这样就OK了 给分吧 a.data里面的值 你根据数据库来赋值吧
      

  3.   

    sql server 无限制动态行转列
    http://topic.csdn.net/u/20100107/10/d0b18f4b-2b34-4436-a192-2472c96d0867.html?18136
      

  4.   

    drop table mytable;
    create table mytable(
    id int,
    name varchar(10),
    date varchar(10),
    value int
    );insert into mytable values(1,'A','2006','106');
    insert into mytable values(2,'A','2007','107');
    insert into mytable values(3,'A','2008','108');
    insert into mytable values(4,'B','2006','106');
    insert into mytable values(5,'B','2007','107');
    insert into mytable values(6,'B','2008','108');
    insert into mytable values(7,'C','2006','106');
    insert into mytable values(7,'C','2007','107');
    insert into mytable values(7,'C','2008','108');
    insert into mytable values(1,'A','2006','106');select a.name,a.value as '2006',b.value as '2007',c.value as '2008' from(select name,value  from mytable where date='2006')a
    left join(select name as name,value from mytable where date='2007')b
    on a.name=b.name left join(select name as name,value from mytable where date='2008')c
    on a.name=c.name