先谢谢关注的哥们、姐们!
问题:
有下面这样的表:姓名 上课时间 日期 课程
张三 9:00:00 星期一 数学
张三 14:00:00 星期二 英语
张三 19:00:00 星期二 数学怎样才能得掉下面这样的课程表呢?*****星期一 星期二 星期三 星期四 星期五 星期六 星期日
上午 数学
下午 (占位) 英语
晚上(占位)英语 
自己查了下,发现挺复杂的!本人愚钝没能看懂!那么拜托各位了!

解决方案 »

  1.   

    create table kb(姓名 nvarchar(10),上课时间 varchar(8),日期 nvarchar(8),课程 nvarchar(10))
    insert into kb select '张三','9:00:00','星期一','数学'
    insert into kb select '张三','14:00:00','星期二','英语'
    insert into kb select '张三','19:00:00','星期二','数学'
    go
    ;with cte as(
    select (case when datepart(hh,上课时间)<12 then '上午' when datepart(hh,上课时间)>18 then '晚上' else '下午'end)as 时间,日期,课程 from kb
    )select * from cte pivot (max([课程]) for [日期] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]))b
    go
    drop table kb
    /*
    时间   星期一        星期二        星期三        星期四        星期五        星期六        星期日
    ---- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    上午   数学         NULL       NULL       NULL       NULL       NULL       NULL
    晚上   NULL       数学         NULL       NULL       NULL       NULL       NULL
    下午   NULL       英语         NULL       NULL       NULL       NULL       NULL(3 行受影响)
    */
      

  2.   

    不好意思,我的是2000 没有cte 
    可以怎么改呢?
      

  3.   

    那就参照这个吧:
    Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
    Insert Class
    select N'张三',N'语文',78 union all
    select N'张三',N'数学',87 union all
    select N'张三',N'英语',82 union all
    select N'张三',N'物理',90 union all
    select N'李四',N'语文',65 union all
    select N'李四',N'数学',77 union all
    select N'李四',N'英语',65 union all
    select N'李四',N'物理',85 
    Go
    --2000方法:
    动态:declare @s nvarchar(4000)
    set @s=''
    Select     @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
    from Class group by[Course]
    exec('select [Student]'+@s+' from Class group by [Student]')
      

  4.   

    谢谢(涩(*^__^*)郎) 也谢谢  (晴天)
    (涩(*^__^*)郎) 说的也是个问题 所以我就如下解决了!create table kb(姓名 nvarchar(10),上课时间 varchar(8),日期 nvarchar(8),课程 nvarchar(10))
    insert into kb select '张三','9:00:00','星期一','数学'
    insert into kb select '张三','14:00:00','星期二','英语'
    insert into kb select '张三','19:00:00','星期二','数学'
    select convert(varchar(8),时间,108) as 时间,
      max(case 日期 when '星期一' then 课程   end) 星期一,
      max(case 日期 when '星期二' then 课程   end) 星期二,
      max(case 日期 when '星期三' then 课程   end) 星期三,
      max(case 日期 when '星期四' then 课程   end) 星期四,
      max(case 日期 when '星期五' then 课程   end) 星期五,
      max(case 日期 when '星期六' then 课程   end) 星期六,
      max(case 日期 when '星期日' then 课程   end) 星期日
    from kb
    group by 时间drop table kb/*
    时间       星期一       星期二       星期三       星期四       星期五      星期六      星期日
    ---- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    9:00:00    数学         NULL       NULL       NULL       NULL       NULL       NULL
    14:00:00   NULL       数学         NULL       NULL       NULL       NULL       NULL
    19:00:00   NULL       英语         NULL       NULL       NULL       NULL       NULL(3 行受影响)
    */