SQL试题2
一、
教师号 星期号 是否有课
1 2 有
1 3 有
2 1 有
3 2 有`
1 2 有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
1 2 1
2 1
3 1
各星期下的数字表示:对应的教师在星期几已经排的课数
一、
教师号 星期号 是否有课
1 2 有
1 3 有
2 1 有
3 2 有`
1 2 有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
1 2 1
2 1
3 1
各星期下的数字表示:对应的教师在星期几已经排的课数
create table T(教师号 int,星期号 int,是否有课 nvarchar(10))
insert T select 1,2,'有'
union all select 1,3,'有'
union all select 2,1,'有'
union all select 3,2,'有'
union all select 1,2,'有'
select 教师号,
[星期一]=sum(case when 星期号=1 and 是否有课='有' then 1 end),
[星期二]=sum(case when 星期号=2 and 是否有课='有' then 1 end),
[星期三]=sum(case when 星期号=3 and 是否有课='有' then 1 end)
from T
group by 教师号--result
教师号 星期一 星期二 星期三
----------- ----------- ----------- -----------
1 NULL 2 1
2 1 NULL NULL
3 NULL 1 NULL(3 row(s) affected)
给lz一个很笨的,但是很容易理解的办法:
declare @T2 table (教师号 int,星期一 int,星期二 int,星期三 int)insert @T2(教师号,星期一)
select 教师号,count(*)
from T
group by 教师号,星期号 having 星期号=1insert @T2(教师号,星期二)
select 教师号,count(*)
from T
group by 教师号,星期号 having 星期号=2insert @T2(教师号,星期二)
select 教师号,count(*)
from T
group by 教师号,星期号 having 星期号=3
select 教师号,
sum(星期一) as 星期一,
sum(星期二) as 星期二,
sum(星期三) as 星期三 from @T2
group by 教师号delete from @T2
insert T select 1,2,'有'
union all select 1,3,'有'
union all select 2,1,'有'
union all select 3,2,'有'
union all select 1,2,'有'
这些你可以不理会,是创建表的。所以真正的语句只有这句:select 教师号,
[星期一]=sum(case when 星期号=1 and 是否有课='有' then 1 end),
[星期二]=sum(case when 星期号=2 and 是否有课='有' then 1 end),
[星期三]=sum(case when 星期号=3 and 是否有课='有' then 1 end)
from T
group by 教师号
[星期一]=sum(case when 星期号=1 and 是否有课='有' then 1 end),
[星期二]=sum(case when 星期号=2 and 是否有课='有' then 1 end),
[星期三]=sum(case when 星期号=3 and 是否有课='有' then 1 end)
from T
group by 教师号
[星期一] = sum(case when [是否有课]='有' and [星期号] = 1 then 1 else 0 end),
[星期二] = sum(case when [是否有课]='有' and [星期号] = 2 then 1 else 0 end),
[星期三] = sum(case when [是否有课]='有' and [星期号] = 3 then 1 else 0 end)
from t group by 教师号