小弟在写程序时遇到难题了
想实现如下表转换,,深知算法很难,能力有限,请前辈们帮帮忙!有数据库表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    英语

解决方案 »

  1.   

    http://topic.csdn.net/u/20100204/15/bb144d9f-9bdc-4ec3-b6bd-3ef692d8cd61.html?15435
      

  2.   

    如是2000以后的版本建议去看看2005中 pivot 用法。自己理解更深刻点。
      

  3.   

    应该还要按班分组吧,根据你的结果,先写一个
    ---测试数据---
    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 行)
      

  4.   

    SELECT 课节, [1],[2],[3],[4],[5],[6],[7]
    FROM 
    (select 星期,课节,课程 from #tb ) AS p
    PIVOT
    (
    max(p.课程)
    FOR 星期 IN
    (  [1],[2],[3],[4],[5],[6],[7] )
    ) AS pvt
    order by 课节
      

  5.   

    多谢了, josy 大侠  代码简单易懂  ,顶一下         ldslove大侠  代码的再sql2005上用吧,我用的是sql2000测试没成功!