SELECT * FROM tb2张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94 -----动态行专列,出错
DECLARE @sql varchar(2000)
SET @sql='select d_Name'
SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
FROM (SELECT DISTINCT d_Subject FROM tb2) ta
SET @sql=@sql+'from tb2 group by d_Name'
EXEC(@sql)服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'tb2' 附近有语法错误。
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94 -----动态行专列,出错
DECLARE @sql varchar(2000)
SET @sql='select d_Name'
SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
FROM (SELECT DISTINCT d_Subject FROM tb2) ta
SET @sql=@sql+'from tb2 group by d_Name'
EXEC(@sql)服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'tb2' 附近有语法错误。
--创建表test
if object_id('test') is not null drop table test
create table test
([name] varchar(20),
[subject] varchar(10),
[result] int
)
go
--插入数据
insert into test
select '张三','语文',73 union all
select '张三','数学',83 union all
select '张三','物理',93 union all
select '李四','语文',76 union all
select '李四','数学',86 union all
select '李四','物理',96 --进行查询
declare @sqlstr varchar(8000)
select @sqlstr = ''
select @sqlstr = @sqlstr +',sum(case [subject] when '''+[subject]+''' then [result] else 0 end) as '+ [subject]
from test
group by [subject]
exec('select [name] as 姓名'+@sqlstr+' from test group by [name]')
/*结果
姓名 数学 物理 语文
----------------------------------
李四 86 96 76
张三 83 93 73
*/
SET @sql='select d_Name'
SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject
FROM (SELECT DISTINCT d_Subject FROM tb2) ta
SET @sql=@sql+' from tb2 group by d_Name'
EXEC(@sql)/*结果
d_Name 数学 物理 语文
----------------------------------
李四 86 96 76
张三 83 93 73
*/
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94 -----动态行专列,出错
DECLARE @sql varchar(2000)
SET @sql='select d_Name'
SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
FROM (SELECT DISTINCT d_Subject FROM tb2) ta
SET @sql=@sql+' /*这里加个空格*/from tb2 group by d_Name'
EXEC(@sql)
--SELECT @sql=@sql+',max(case d_Subject when '''+d_Subject+''' then d_Result else 0 end) '+d_Subject+''
--把 +d_Subject 后面的 +‘’ 去掉
--SET @sql=@sql+' from tb2 group by d_Name'
--在from前加个空格