一个关于mysql的问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 23:52:11
表1
+----+----+----+
| id | tt | vv |
+----+----+----+
| 1 | aa | 1 |
| 1 | bb | 2 |
| 2 | aa | 4 |
| 2 | bb | 2 |
+----+----+----+

有什么方法把表变成
+----+----+----+
| id | aa | bb |
+----+----+----+
| 1 | 1 | 2 |
| 2 | 4 | 2 |
+----+----+----+

直接用sql来写确实比较麻烦,你可以试试cool_hnu的做法,写存储过程试试
我告诉你笨方法,呵呵:
先查出来tt列里面不同的字段:
select distinct tt from 表1;
得到aa,bb....这样的,然后用结果集1当作新表的字段,手动建立也行,alert table也行。
再找到不同的id
select distinct id from 表1;
得到结果集2;
select {结果集1的第二项} from 表1 where id={结果集2循环} and tt={结果集1的第一项};
这样再写到新表里面就行了。。。

declare @sql varchar(8000)
set @sql = 'select id '
select @sql = @sql + ' , max(case tt when ''' + tt + ''' then vv else 0 end) [' + tt + ']'
from (select distinct tt from 表1) as a
set @sql = @sql + ' from tb group by id'
exec(@sql)

1条sql就能解决
select id,MAX(case tt when 'aa' then w else 0 end) aa,
MAX(case tt when 'bb' then w else 0 end) bb
from 表1
group by id

光靠sql语句有点难了

用php可能容易些