先谢谢关注的哥们、姐们!
问题:
有下面这样的表:姓名 上课时间 日期 课程
张三 9:00:00 星期一 数学
张三 14:00:00 星期二 英语
张三 19:00:00 星期二 数学怎样才能得掉下面这样的课程表呢?*****星期一 星期二 星期三 星期四 星期五 星期六 星期日
上午 数学
下午 (占位) 英语
晚上(占位)英语
自己查了下,发现挺复杂的!本人愚钝没能看懂!那么拜托各位了!
问题:
有下面这样的表:姓名 上课时间 日期 课程
张三 9:00:00 星期一 数学
张三 14:00:00 星期二 英语
张三 19:00:00 星期二 数学怎样才能得掉下面这样的课程表呢?*****星期一 星期二 星期三 星期四 星期五 星期六 星期日
上午 数学
下午 (占位) 英语
晚上(占位)英语
自己查了下,发现挺复杂的!本人愚钝没能看懂!那么拜托各位了!
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 行受影响)
*/
可以怎么改呢?
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]')
(涩(*^__^*)郎) 说的也是个问题 所以我就如下解决了!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 行受影响)
*/