朋友们一定用过课程表吧
假如课程表如下
节次\星期 星期一              星期二 星期三 星期四 星期五第一节    课程名/教师(下同)第二节第三节第四节数据库结构(简化)
表c
课程号(主键) 课程名 教师 上课星期 上课节次
在设计程序的时候,比如asp,在相应位置可以查询,比如select 课程名,教师名 from c where 上课星期='星期?' and 上课节次='第?节' 这样可以查出来,但是对于server来说有点累,要查询5*4=20次朋友们有没有好的方法一次查询出来,sql也好,程序思想也好.....一切方法都好~~^_^ 希望大家指点~
thanks~!!

解决方案 »

  1.   

    标准的交叉表查询,你搜索一下,有以前很多例子如果你的软件里的报表系统支持CROSSTAB的话,就不用SQL语句,直接在报表里设置就可以实现你的要求
      

  2.   

    比如select 课程名,教师名 from c where 上课星期='星期?' and 上课节次='第?节' 这样可以查出来,但是对于server来说有点累,要查询5*4=20次
    ------------------------------------------------
    要查询5*4=20次 这句话要更正一下针对你写的SQL语句,查询时主要受表记录数的影响!
    对每条记录SERVER都会扫描,针对单条记录会作条件判断!
    然后列出符合条件的记录
      

  3.   

    select 
    上课节次 as [节次\星期],
    max(case when 上课星期='星期一' then rtrim(课程名)+'/'+rtrim(教师) end) as  [星期一],
    max(case when 上课星期='星期二' then rtrim(课程名)+'/'+rtrim(教师) end) as  [星期二],
    max(case when 上课星期='星期三' then rtrim(课程名)+'/'+rtrim(教师) end) as  [星期三],
    max(case when 上课星期='星期四' then rtrim(课程名)+'/'+rtrim(教师) end) as  [星期四],
    max(case when 上课星期='星期五' then rtrim(课程名)+'/'+rtrim(教师) end) as  [星期五]
    from c
    group by 上课节次