请教一个树形表的SQL交叉表查询。

我有一个树形表是这样的

id number lever name time
1 1 1 星期一
2 1.1 2 语文 上午
3 1.2 2 数学 上午
4 1.3 2 英语 下午
5 1.4 2 政治 下午
6 2 1 星期二
7 2.1 2 化学 上午
8 2.2 2 物理 上午
9 2.3 2 数学 下午
10 2.4 2 语文 下午

......

如何用SQL查询将结果变为这样?

星期一 1 上午 语文 数学 下午 英语 政治
星期二 2 上午 化学 物理 下午 数学 语文

请教各位。
---------------------------------------------------------------

declare @a table(id int, number varchar(10),lever int,name varchar(10),time varchar(10))
insert @a select 1, '1' , 1, '星期一', null
union all select 2, '1.1', 2, '语文' , '上午'
union all select 3, '1.2', 2, '数学' , '上午'
union all select 4, '1.3', 2 , '英语' , '下午'
union all select 5, '1.4', 2 , '政治' , '下午'
union all select 6, '2', 1, '星期二', null
union all select 7, '2.1', 2, '化学' , '上午'
union all select 8, '2.2', 2, '物理' , '上午'
union all select 9, '2.3', 2, '数学' , '下午'
union all select 10, '2.4', 2, '语文' , '下午'

select a.name,b.* from
(select number,name from @a where lever=1) a,
(select left(number,1) as number,
min(case when right(number,1)<=2 then time end) time1,
min(case when right(number,1)=1 then name end) name1,
min(case when right(number,1)=2 then name end) name2,
min(case when right(number,1)>2 then time end) time2,
min(case when right(number,1)=3 then name end) name3,
min(case when right(number,1)=4 then name end) name4
from @a where lever=2 group by left(number,1)
) b where a.number=b.number

----------------------------------------
name number time1 name1 name2 time2 name3 name4
---------- ------ ---------- ---------- ---------- ---------- ---------- ----------
星期一 1 上午 语文 数学 下午 英语 政治
星期二 2 上午 化学 物理 下午 数学 语文

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus