例如 全部记录以下
名字 科目 分数
1 语文 90
1 数学 80
2 语文 90
2 数学 85
2 外语 70.............
其中科目只有 语文 数学 外语
比如1 没有外语分数记录 设置 100 分转化为表格
名字 语文 数学 外语 总分
1 90 80 100 270
2 90 85 70 245.......
谢谢
名字 科目 分数
1 语文 90
1 数学 80
2 语文 90
2 数学 85
2 外语 70.............
其中科目只有 语文 数学 外语
比如1 没有外语分数记录 设置 100 分转化为表格
名字 语文 数学 外语 总分
1 90 80 100 270
2 90 85 70 245.......
谢谢
insert T select '1', '语文', 90
union all select '1', '数学', 80
union all select '2', '语文', 90
union all select '2', '数学', 85
union all select '2', '外语', 70declare @sql varchar(8000)
set @sql='select 名字,'
select @sql=@sql+quotename(科目)+'=isnull( max(case when 科目='+quotename(科目, '''')+' then 分数 end), 100),'
from T
group by 科目
select @sql=left(@sql, len(@sql)-1),
@sql=@sql+' from T group by 名字'
exec(@sql)--result
名字 数学 外语 语文
---------- ----------- ----------- -----------
1 80 100 90
2 85 70 90
insert into # select 1 , '语文' , 90 union all
select 1 , '数学' , 80 union all
select 2 , '语文' , 90 union all
select 2 , '数学' , 85 union all
select 2 , '外语' , 70select
t.名字,
语文=isnull(max(case when t.科目='语文' then 分数 end),100),
数学=isnull(max(case when t.科目='数学' then 分数 end),100),
外语=isnull(max(case when t.科目='外语' then 分数 end),100),总分=sum(isnull(分数,100))
from
# a
right join
(select *
from ((select distinct 科目 from #)t1
cross join (select distinct 名字 from #) t2)) t
on t.名字=a.名字 and t.科目=a.科目
group by t.名字--res
1 90 80 100 270
2 90 85 70 245
你的有点小问题
你的是还要据科目分组 但如果记录里面没有一个 "外语"的记录 那么所有外语 都为空了
jacobsan(梅) 你的很好 谢谢 正在在学习中~~~
insert T select '1', '语文', 90
union all select '1', '数学', 80
union all select '2', '语文', 90
union all select '2', '数学', 85
union all select '2', '外语', 70declare @sql varchar(8000)
declare @sql2 varchar(1000)
set @sql=''
set @sql2='總分='
select @sql=@sql+quotename(科目)+'=isnull( max(case when 科目='+quotename(科目, '''')+' then 分数 end), 100),',
@sql2=@sql2+'tmp.'+科目+'+'
from T
group by 科目
select
@sql2=left(@sql2, len(@sql2)-1),
@sql=left(@sql, len(@sql)-1),
@sql='select tmp.*,'+@sql2+' from (select 名字,'+@sql,
@sql=@sql+' from T group by 名字) tmp'
exec(@sql)--result
名字 数学 外语 语文 總分
---------- ----------- ----------- ----------- -----------
1 80 100 90 270
2 85 70 90 245