表Student_KC :
年度 年级 班级 科目 姓名
2008 初一 1班 语文 AA
2008 初一 1班 数学 BB
2008 初一 1班 英语 CC
...
表manage_subject_table :
年度 年级 班级 星期 节次 科目 备注
2008 初一 1班 星期一 1  语文 早课 
2008 初一 1班 星期一 2  英语
2008 初一 1班 星期一 3  数学 午课
2008 初一 1班 星期二 1  数学
...
我要得到的课表如(年度=2008,年级=初一,班级=1班):
节次 星期一 星期二 星期三 星期四 星期五 星期六 星期日
1   AA    BB
2   CC
3   BB
___
原来manage_subject_table没有备注的时候,我用的以下语句是非常正确的:
select @sql=@sql+quotename(星期)+'=max(case when 星期='+quotename(星期, '''')+' then 姓名 else '''' end),' from manage_subject_table group by 星期 order by 星期
select @sql=left(@sql, len(@sql)-1),@sql=@sql+' from manage_subject_table A left join Student_KC as B on A.年度=B.年度 and A.年级=B.年级 and A.班级=B.班级 and A.科目=B.科目 where A.年度='''+@Niandu+''' and A.年级='''+@Glad+''' and A.班级='''+@Class1+''' group by 节次'
exec(@sql)
___
我在manage_subject_table的后加了一个备注字段,以上的语句就出错了,不知道错在什么地方?

解决方案 »

  1.   

    樓主語句沒有貼完?@sql的賦值少了"select 节次 ,"那一段
      

  2.   

    貼出來沒有問題參照:
    行列互转_整理贴3  [推荐]  
    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
      

  3.   

    估計是添加"备注"顯示要用min/max或把group by加上"备注",樓主要的顯示格式為?
      

  4.   

    create table Student_KC(年度 int,年级 varchar(8),班级 varchar(8),科目 varchar(8),姓名 varchar(8)) 
    insert into Student_KC values(2008,'初一','1班','语文','AA') 
    insert into Student_KC values(2008,'初一','1班','数学','BB') 
    insert into Student_KC values(2008,'初一','1班','英语','CC') create table manage_subject_table(年度 int,年级 varchar(8),班级 varchar(8),星期 varchar(8),节次 int,科目 varchar(8),备注 varchar(8))
    insert into manage_subject_table values(2008,'初一','1班','星期一',1,'语文','早课') 
    insert into manage_subject_table values(2008,'初一','1班','星期一',2,'英语','    ')
    insert into manage_subject_table values(2008,'初一','1班','星期一',3,'数学','午课') 
    insert into manage_subject_table values(2008,'初一','1班','星期二',1,'数学','    ')
    godeclare @sql varchar(8000),@Niandu varchar(8),@Glad varchar(8),@Class1 varchar(8)
    select @sql='select 节次,',@Niandu='2008',@Glad='初一',@Class1='1班'
    select @sql=@sql+quotename(星期)+'=max(case when 星期='+quotename(星期, '''')+' then 姓名 else '''' end),' from manage_subject_table group by 星期 order by 星期 
    select @sql=left(@sql, len(@sql)-1),@sql=@sql+' from manage_subject_table A left join Student_KC as B on A.年度=B.年度 and A.年级=B.年级 and A.班级=B.班级 and A.科目=B.科目 where A.年度='''+@Niandu+''' and A.年级='''+@Glad+''' and A.班级='''+@Class1+''' group by 节次' 
    print @sql
    exec(@sql)
    godrop table  Student_KC,manage_subject_table
    go
      

  5.   

    create table Student_KC(年度 varchar(4), 年级 nvarchar(10),班级 nvarchar(10),科目 nvarchar(10), 姓名 nvarchar(10))
    insert into student_kc select '2008','初一','1班','语文','AA'
    insert into student_kc select '2008','初一','1班','数学','BB'
    insert into student_kc select '2008','初一','1班','英语','CC'create table manage_subject_table(年度 varchar(4),年级  nvarchar(10),班级  nvarchar(10),星期  nvarchar(10),节次 int,科目  nvarchar(10),备注 nvarchar(10)) 
    insert into manage_subject_table select '2008','初一','1班','星期一', 1,'语文', '早课' 
    insert into manage_subject_table select '2008','初一','1班','星期一', 2,'英语', null
    insert into manage_subject_table select '2008','初一','1班','星期一', 3,'数学', '午课' 
    insert into manage_subject_table select '2008','初一','1班','星期二', 1,'数学', null
    go
    declare @sql nvarchar(500)
    declare @Niandu nvarchar(10),@Glad nvarchar(10),@Class1 nvarchar(10)
    select @Niandu='2008',@Glad='初一',@class1='1班'
    select @sql='select A.节次, '
    select @sql=@sql+quotename(星期)+'=max(case when 星期='+quotename(星期, '''')+' then 姓名 else '''' end),' from manage_subject_table group by 星期 order by 星期 
    select @sql=left(@sql, len(@sql)-1),@sql=@sql+' from manage_subject_table A left join Student_KC as B on A.年度=B.年度 and A.年级=B.年级 and A.班级=B.班级 and A.科目=B.科目 where A.年度='''+@Niandu+''' and A.年级='''+@Glad+''' and A.班级='''+@Class1+''' group by 节次' 
    exec(@sql) 
    --select @sql
    go
    drop table student_kc,manage_subject_table
    /*
    节次          星期二        星期一
    ----------- ---------- ----------
    1           BB         AA
    2                      CC
    3                      BB(3 行受影响)*/