已知2表:
subject_teacher:
年度 年级 班级 科目 教师
2007  初一 1班 语文 张三
2007  初一 1班 数学 李四
2007  初一 2班 语文 张三
2007  初一 2班 数学 王五
...
subject_paike:
年度 年级 班级 星期 节次 科目
2007  初一 1班 星期一 1 语文
2007  初一 1班 星期一 2 语文
2007  初一 2班 星期三 1 语文
2007  初一 2班 星期一 2 数学
...
问题:我要得到某一个教师比如:张三的个人课程表,格式如:
节次 星期一  星期二  星期三  星期四 星期五 星期六
1  初一1班      初一2班
   语文        语文
2  初一1班
   语文
.....
谢谢!

解决方案 »

  1.   

    select 
    b.节次,
    max(case when b.星期='星期一' then a.年级+a.班级+char(13)+char(10)+a.科目 end) as 星期一,
    max(case when b.星期='星期二' then a.年级+a.班级+char(13)+char(10)+a.科目 end) as 星期二,
    max(case when b.星期='星期三' then a.年级+a.班级+char(13)+char(10)+a.科目 end) as 星期三,
    max(case when b.星期='星期四' then a.年级+a.班级+char(13)+char(10)+a.科目 end) as 星期四,
    max(case when b.星期='星期五' then a.年级+a.班级+char(13)+char(10)+a.科目 end) as 星期五,
    max(case when b.星期='星期六' then a.年级+a.班级+char(13)+char(10)+a.科目 end) as 星期六
    from subject_teacher a,subject_paike b
    where a.年度=b.年度
    and a.年级=b.年级
    and a.班级=b.班级
    and a.科目=b.科目
    and a.教师='张三'
    group by b.节次
      

  2.   

    --测试
    declare @subject_teacher table(
    年度 int,
    年级 varchar(10),
    班级 varchar(10),
    科目 varchar(10),
    教师 varchar(10)
    )insert @subject_teacher select
    2007,  '初一', '1班', '语文', '张三'
    union all select
    2007,  '初一', '1班', '数学', '李四'
    union all select
    2007,  '初一', '2班', '语文', '张三'
    union all select
    2007,  '初一', '2班', '数学', '王五'declare @subject_paike table (
    年度 int,
    年级 varchar(10),
    班级 varchar(10),
    星期 varchar(10),
    节次 varchar(10),
    科目 varchar(10)
    )insert @subject_paike select
    2007  ,'初一', '1班', '星期一', '1', '语文'
    union all select
    2007  ,'初一', '1班', '星期一', '2', '语文'
    union all select
    2007  ,'初一', '2班', '星期三', '1', '语文'
    union all select
    2007  ,'初一', '2班', '星期一', '2', '数学'select 
    b.节次,
    max(case when b.星期='星期一' then a.年级+a.班级+' '+a.科目 end) as 星期一,
    max(case when b.星期='星期二' then a.年级+a.班级+' '+a.科目 end) as 星期二,
    max(case when b.星期='星期三' then a.年级+a.班级+' '+a.科目 end) as 星期三,
    max(case when b.星期='星期四' then a.年级+a.班级+' '+a.科目 end) as 星期四,
    max(case when b.星期='星期五' then a.年级+a.班级+' '+a.科目 end) as 星期五,
    max(case when b.星期='星期六' then a.年级+a.班级+' '+a.科目 end) as 星期六
    from @subject_teacher a,@subject_paike b
    where a.年度=b.年度
    and a.年级=b.年级
    and a.班级=b.班级
    and a.科目=b.科目
    and a.教师='张三'
    group by b.节次--结果
    节次         星期一                             星期二                             星期三                             星期四                             星期五                             星期六                             
    ---------- ------------------------------- ------------------------------- ------------------------------- ------------------------------- ------------------------------- ------------------------------- 
    1          初一1班 语文                         NULL                            初一2班 语文                         NULL                            NULL                            NULL
    2          初一1班 语文                         NULL                            NULL                            NULL                            NULL                            NULL(所影响的行数为 2 行)
      

  3.   

    case when b.星期='星期一' then a.年级+a.班级+char(13)+char(10)+a.科目  else '' end)----    else '' end
      

  4.   

    null显示空格
    declare @subject_teacher table(
    年度 int,
    年级 varchar(10),
    班级 varchar(10),
    科目 varchar(10),
    教师 varchar(10)
    )insert @subject_teacher select
    2007,  '初一', '1班', '语文', '张三'
    union all select
    2007,  '初一', '1班', '数学', '李四'
    union all select
    2007,  '初一', '2班', '语文', '张三'
    union all select
    2007,  '初一', '2班', '数学', '王五'declare @subject_paike table (
    年度 int,
    年级 varchar(10),
    班级 varchar(10),
    星期 varchar(10),
    节次 varchar(10),
    科目 varchar(10)
    )insert @subject_paike select
    2007  ,'初一', '1班', '星期一', '1', '语文'
    union all select
    2007  ,'初一', '1班', '星期一', '2', '语文'
    union all select
    2007  ,'初一', '2班', '星期三', '1', '语文'
    union all select
    2007  ,'初一', '2班', '星期一', '2', '数学'select 
    b.节次,
    max(case when b.星期='星期一' then a.年级+a.班级+' '+a.科目 else '' end) as 星期一,
    max(case when b.星期='星期二' then a.年级+a.班级+' '+a.科目 else '' end) as 星期二,
    max(case when b.星期='星期三' then a.年级+a.班级+' '+a.科目 else '' end) as 星期三,
    max(case when b.星期='星期四' then a.年级+a.班级+' '+a.科目 else '' end) as 星期四,
    max(case when b.星期='星期五' then a.年级+a.班级+' '+a.科目 else '' end) as 星期五,
    max(case when b.星期='星期六' then a.年级+a.班级+' '+a.科目 else '' end) as 星期六
    from @subject_teacher a,@subject_paike b
    where a.年度=b.年度
    and a.年级=b.年级
    and a.班级=b.班级
    and a.科目=b.科目
    and a.教师='张三'
    group by b.节次
      

  5.   

    case when 变量或字段='星期一' then .. else ... end或case 变量或字段 when '星期一' then .. else ... end
      

  6.   

    不是null显示空格,而是显示空串''
      

  7.   

    --用动态也可以declare @s varchar(500) set @s=''
    select @s=@s+',max(case 星期 when '''+星期+''' then 年级+班级+'' ''+科目 else '''' end) as '+星期
    from subject_paike group by 星期select @s='select 节次'+@s+'
    from (select p.*,t.教师 from subject_paike p
    join subject_teacher t
    on p.年度=t.年度 and 
    p.年级=t.年级 and 
    p.班级=t.班级 and 
    p.科目=t.科目 and 
    t.教师=''张三'')j 
    group by 节次'
    exec (@s)