当前位置: 代码迷 >> Sql Server >> 这个视图怎么建立
  详细解决方案

这个视图怎么建立

热度:69   发布时间:2016-04-27 14:24:07.0
这个视图如何建立
现在有以下几个表:

班级列表

年级 班
初一 1
初一 3
初二 2
初二 3
初二 4
初三 1
初三 2
初三 3


年级开课表
年级 科目
初一 语文
初一 数学
初二 语文
初二 英语
初三 语文
初三 数学
初三 英语

我根据以上两个表生成以下这个表:

班级任课表
年级 班 科目 教师
初一 1 语文 赵一
初一 3 语文 赵一
初一 1 数学 钱二
初一 3 数学 周三
初二 2 语文 孙兵
初二 3 语文 张飞
初二 4 语文 刘备
初二 2 英语 赵一
初二 3 英语 赵一
初二 4 英语 钱二
初三 1 语文 周三
初三 2 语文 孙兵
初三 3 语文 张飞
初三 1 数学 刘备
初三 2 数学 赵一
初三 3 数学 赵一
初三 1 英语 钱二
初三 2 英语 周三
初三 3 英语 孙兵

我想通过一个存储过程来建立以下视图(视图的数量及名称由年级开课表确定):
初一视图

班 语文 数学
1 赵一 钱二
3 赵一 周三

初二视图
班 语文 英语
2 孙兵 赵一
3 张飞 赵一
4 刘备 钱二

初三视图

班 语文 数学 英语
1 周三 刘备 钱二
2 孙兵 赵一 周三
3 张飞 赵一 孙兵

并且以后对班级任课表的修改通过对这几个视图的修改来实现,不知道这样设计合不合理,如果可行的话,怎样实现?谢谢

------解决方案--------------------
行转列
------解决方案--------------------
SQL code
create table 班级任课表 (年级 varchar(6), 班 int, 科目 varchar(6), 教师 varchar(6))insert into 班级任课表select '初一', '1', '语文', '赵一' union allselect '初一', '3', '语文', '赵一' union allselect '初一', '1', '数学', '钱二' union allselect '初一', '3', '数学', '周三' union allselect '初二', '2', '语文', '孙兵' union allselect '初二', '3', '语文', '张飞' union allselect '初二', '4', '语文', '刘备' union allselect '初二', '2', '英语', '赵一' union allselect '初二', '3', '英语', '赵一' union allselect '初二', '4', '英语', '钱二' union allselect '初三', '1', '语文', '周三' union allselect '初三', '2', '语文', '孙兵' union allselect '初三', '3', '语文', '张飞' union allselect '初三', '1', '数学', '刘备' union allselect '初三', '2', '数学', '赵一' union allselect '初三', '3', '数学', '赵一' union allselect '初三', '1', '英语', '钱二' union allselect '初三', '2', '英语', '周三' union allselect '初三', '3', '英语', '孙兵'--1create view 初一视图aswith t as(select 年级,班,max(case when 科目='语文' then 教师 else '' end) '语文',max(case when 科目='数学' then 教师 else '' end) '数学',max(case when 科目='英语' then 教师 else '' end) '英语'from 班级任课表 group by 年级,班)select 班,语文,数学,英语 from t where 年级='初一'select * from 初一视图班           语文     数学     英语----------- ------ ------ ------1           赵一     钱二     3           赵一     周三    --2create view 初二视图aswith t as(select 年级,班,max(case when 科目='语文' then 教师 else '' end) '语文',max(case when 科目='数学' then 教师 else '' end) '数学',max(case when 科目='英语' then 教师 else '' end) '英语'from 班级任课表 group by 年级,班)select 班,语文,数学,英语 from t where 年级='初二'select * from 初二视图班           语文     数学     英语----------- ------ ------ ------2           孙兵            赵一3           张飞            赵一4           刘备            钱二--3create view 初三视图aswith t as(select 年级,班,max(case when 科目='语文' then 教师 else '' end) '语文',max(case when 科目='数学' then 教师 else '' end) '数学',max(case when 科目='英语' then 教师 else '' end) '英语'from 班级任课表 group by 年级,班)select 班,语文,数学,英语 from t where 年级='初三'select * from 初三视图班           语文     数学     英语----------- ------ ------ ------1           周三     刘备     钱二2           孙兵     赵一     周三3           张飞     赵一     孙兵
------解决方案--------------------
一定要视图+动态SQL的话,貌似行不通喔.

------解决方案--------------------
/*
现在有以下几个表:
班级列表
年级 班
初一 1
初一 3
初二 2
初二 3
初二 4
初三 1
初三 2
初三 3

年级开课表 
年级 科目
初一 语文
初一 数学
初二 语文
初二 英语
初三 语文
初三 数学
初三 英语

我根据以上两个表生成以下这个表:

班级任课表 
年级 班 科目 教师
初一 1 语文 赵一
初一 3 语文 赵一
初一 1 数学 钱二
初一 3 数学 周三
初二 2 语文 孙兵
初二 3 语文 张飞
初二 4 语文 刘备
初二 2 英语 赵一
初二 3 英语 赵一
初二 4 英语 钱二
初三 1 语文 周三
初三 2 语文 孙兵
初三 3 语文 张飞
初三 1 数学 刘备
初三 2 数学 赵一
初三 3 数学 赵一
初三 1 英语 钱二
初三 2 英语 周三
初三 3 英语 孙兵
  相关解决方案