表名:table1
字段名 姓名 课程 成绩
张三 语文 80
张三 英语 90
张三 数学 51
张三 化学 62
李四 语文 78
李四 英语 88
李四 数学 90
李四 物理 85
王五 语文 80
王五 英语 87
王五 数学 93
王五 物理 86
王五 化学 60
王五 音乐 75表名:table2
字段名 姓名 语文 英语 数学 化学 物理 音乐
张三 80 90 51
李四 78 88 90 85
王五 80 87 93 60 86 75
我现在要把tble1的结构改成table2的的结构,而且还要把值添加过来
这个应该怎么写语句呢?
字段名 姓名 课程 成绩
张三 语文 80
张三 英语 90
张三 数学 51
张三 化学 62
李四 语文 78
李四 英语 88
李四 数学 90
李四 物理 85
王五 语文 80
王五 英语 87
王五 数学 93
王五 物理 86
王五 化学 60
王五 音乐 75表名:table2
字段名 姓名 语文 英语 数学 化学 物理 音乐
张三 80 90 51
李四 78 88 90 85
王五 80 87 93 60 86 75
我现在要把tble1的结构改成table2的的结构,而且还要把值添加过来
这个应该怎么写语句呢?
insert tb select '张三','语文',80
union all select '张三','英语',90
union all select '张三','数学',51
union all select '张三','化学',62
union all select '李四','语文',78
union all select '李四','英语',88
union all select '李四','数学',90
union all select '李四','物理',85
union all select '王五','语文',80
union all select '王五','英语',87
union all select '王五','数学',93
union all select '王五','物理',86
union all select '王五','化学',60
union all select '王五','音乐',75--select * from tbselect 姓名,
max(case when 课程='语文' then 成绩 end) 语文,
max(case when 课程='英语' then 成绩 end) 英语,
max(case when 课程='数学' then 成绩 end) 数学,
max(case when 课程='化学' then 成绩 end) 化学,
max(case when 课程='物理' then 成绩 end) 物理,
max(case when 课程='音乐' then 成绩 end) 音乐
from tb group by 姓名drop table tb--结果
姓名 语文 英语 数学 化学 物理 音乐
-------------------- ----------- ----------- ----------- ----------- ----------- -----------
李四 78 88 90 NULL 85 NULL
王五 80 87 93 60 86 75
张三 80 90 51 62 NULL NULL(所影响的行数为 3 行)
insert T select '张三', '语文',80
union all select '张三', '英语',90
union all select '张三', '数学',51
union all select '张三', '化学',62
union all select '李四', '语文',78
union all select '李四', '英语',88
union all select '李四', '数学',90
union all select '李四', '物理',85
union all select '王五', '语文',80
union all select '王五', '英语',87
union all select '王五', '数学',93
union all select '王五', '物理',86
union all select '王五', '化学',60
union all select '王五', '音乐', 75declare @sql varchar(8000)
set @sql='select 姓名,'
select @sql=@sql+quotename(课程)+'=max(case when 课程='+quotename(课程, '''')+' then 成绩 end),'
from T group by 课程select @sql=left(@sql, len(@sql)-1), @sql=@sql+' from T group by 姓名'
exec(@sql)--result
姓名 化学 数学 物理 音乐 英语 语文
---------- ----------- ----------- ----------- ----------- ----------- -----------
李四 NULL 90 85 NULL 88 78
王五 60 93 86 75 87 80
张三 62 51 NULL NULL 90 80
declare @sql varchar(8000)
set @sql='select 姓名,'
select @sql=@sql+quotename(课程)+'=max(case when 课程='+quotename(课程, '''')+' then 成绩 end),'
from T group by 课程select @sql=left(@sql, len(@sql)-1), @sql=@sql+' from T group by 姓名'
exec(@sql)
这段是什么意思,能不能解释一下?