SQL试题2                           
                                                
一、
教师号  星期号 是否有课
 1    2   有
 1    3   有
 2    1   有
 3    2   有`
 1    2   有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
 1       2   1 
 2   1   
 3       1
各星期下的数字表示:对应的教师在星期几已经排的课数

解决方案 »

  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)
      

  2.   

    佩服楼上的巧妙办法。
    给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
      

  3.   

    帮楼主解释一下 上面的人的解答: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 教师号
      

  4.   

    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  教师号  
      

  5.   

    select 教师号,
    [星期一] = 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 教师号