小弟在写程序时遇到难题了
想实现如下表转换,,深知算法很难,能力有限,请前辈们帮帮忙!有数据库表Class
星期 课节 课程 班级
1 3 专业1 电子电工17
1 4 政治 电子电工17
1 5 语文 电子电工17
1 6 英语 电子电工17
2 1 英语 电子电工17
2 2 物理 电子电工17
2 2 物理 电子电工17
2 3 语文 电子电工17
2 4 数学 电子电工17
2 6 体育 电子电工17
3 1 专业1 电子电工17
3 2 专业1 电子电工17
3 3 专业2 电子电工17
3 4 专业2 电子电工17
3 5 语文 电子电工17
3 6 数学 电子电工17
4 1 英语 电子电工17
4 2 语文 电子电工17
4 3 英语 电子电工17
4 4 物理 电子电工17
4 4 物理 电子电工17
4 5 政治 电子电工17
4 6 微机 电子电工17
5 1 专业2 电子电工17
5 2 专业2 电子电工17
5 3 专业1 电子电工17
5 4 专业1 电子电工17
5 5 数学 电子电工17
5 6 语文 电子电工17
6 1 数学 电子电工17
6 3 物理 电子电工17
6 3 物理 电子电工17
6 4 语文 电子电工17
6 5 英语 电子电工17
6 6 体育 电子电工17
7 1 专业2 电子电工17
7 2 专业2 电子电工17
7 3 专业1 电子电工17
7 4 专业1 电子电工17
7 5 数学 电子电工17
7 6 英语 电子电工17
如何转成 下面形式表例如 Classt 如课程表似的 [课节] [1] [2] [3] [4] [5] [6] [7] 1 空课
2 空课
3 专业1
4 政治
5 语文
6 英语
想实现如下表转换,,深知算法很难,能力有限,请前辈们帮帮忙!有数据库表Class
星期 课节 课程 班级
1 3 专业1 电子电工17
1 4 政治 电子电工17
1 5 语文 电子电工17
1 6 英语 电子电工17
2 1 英语 电子电工17
2 2 物理 电子电工17
2 2 物理 电子电工17
2 3 语文 电子电工17
2 4 数学 电子电工17
2 6 体育 电子电工17
3 1 专业1 电子电工17
3 2 专业1 电子电工17
3 3 专业2 电子电工17
3 4 专业2 电子电工17
3 5 语文 电子电工17
3 6 数学 电子电工17
4 1 英语 电子电工17
4 2 语文 电子电工17
4 3 英语 电子电工17
4 4 物理 电子电工17
4 4 物理 电子电工17
4 5 政治 电子电工17
4 6 微机 电子电工17
5 1 专业2 电子电工17
5 2 专业2 电子电工17
5 3 专业1 电子电工17
5 4 专业1 电子电工17
5 5 数学 电子电工17
5 6 语文 电子电工17
6 1 数学 电子电工17
6 3 物理 电子电工17
6 3 物理 电子电工17
6 4 语文 电子电工17
6 5 英语 电子电工17
6 6 体育 电子电工17
7 1 专业2 电子电工17
7 2 专业2 电子电工17
7 3 专业1 电子电工17
7 4 专业1 电子电工17
7 5 数学 电子电工17
7 6 英语 电子电工17
如何转成 下面形式表例如 Classt 如课程表似的 [课节] [1] [2] [3] [4] [5] [6] [7] 1 空课
2 空课
3 专业1
4 政治
5 语文
6 英语
---测试数据---
if object_id('[class]') is not null drop table [class]
go
create table [class]([星期] int,[课节] int,[课程] varchar(5),[班级] varchar(10))
insert [class]
select 1,3,'专业1','电子电工17' union all
select 1,4,'政治','电子电工17' union all
select 1,5,'语文','电子电工17' union all
select 1,6,'英语','电子电工17' union all
select 2,1,'英语','电子电工17' union all
select 2,2,'物理','电子电工17' union all
select 2,2,'物理','电子电工17' union all
select 2,3,'语文','电子电工17' union all
select 2,4,'数学','电子电工17' union all
select 2,6,'体育','电子电工17' union all
select 3,1,'专业1','电子电工17' union all
select 3,2,'专业1','电子电工17' union all
select 3,3,'专业2','电子电工17' union all
select 3,4,'专业2','电子电工17' union all
select 3,5,'语文','电子电工17' union all
select 3,6,'数学','电子电工17' union all
select 4,1,'英语','电子电工17' union all
select 4,2,'语文','电子电工17' union all
select 4,3,'英语','电子电工17' union all
select 4,4,'物理','电子电工17' union all
select 4,4,'物理','电子电工17' union all
select 4,5,'政治','电子电工17' union all
select 4,6,'微机','电子电工17' union all
select 5,1,'专业2','电子电工17' union all
select 5,2,'专业2','电子电工17' union all
select 5,3,'专业1','电子电工17' union all
select 5,4,'专业1','电子电工17' union all
select 5,5,'数学','电子电工17' union all
select 5,6,'语文','电子电工17' union all
select 6,1,'数学','电子电工17' union all
select 6,3,'物理','电子电工17' union all
select 6,3,'物理','电子电工17' union all
select 6,4,'语文','电子电工17' union all
select 6,5,'英语','电子电工17' union all
select 6,6,'体育','电子电工17' union all
select 7,1,'专业2','电子电工17' union all
select 7,2,'专业2','电子电工17' union all
select 7,3,'专业1','电子电工17' union all
select 7,4,'专业1','电子电工17' union all
select 7,5,'数学','电子电工17' union all
select 7,6,'英语','电子电工17'
---查询---
select
课节,
max(case 星期 when 1 then 课程 else '空课' end) as [1],
max(case 星期 when 2 then 课程 else '空课' end) as [2],
max(case 星期 when 3 then 课程 else '空课' end) as [3],
max(case 星期 when 4 then 课程 else '空课' end) as [4],
max(case 星期 when 5 then 课程 else '空课' end) as [5],
max(case 星期 when 6 then 课程 else '空课' end) as [6],
max(case 星期 when 7 then 课程 else '空课' end) as [7]
from class
group by 课节---结果---
课节 1 2 3 4 5 6 7
----------- ----- ----- ----- ----- ----- ----- -----
1 空课 英语 专业1 英语 专业2 数学 专业2
2 空课 物理 专业1 语文 专业2 空课 专业2
3 专业1 语文 专业2 英语 专业1 物理 专业1
4 政治 数学 专业2 物理 专业1 语文 专业1
5 语文 空课 语文 政治 数学 英语 数学
6 英语 体育 数学 微机 语文 体育 英语(所影响的行数为 6 行)
FROM
(select 星期,课节,课程 from #tb ) AS p
PIVOT
(
max(p.课程)
FOR 星期 IN
( [1],[2],[3],[4],[5],[6],[7] )
) AS pvt
order by 课节