有2表:
T1
年级 班级 科目 教师
初一 1班  语文 张三
初一 1班  数学 李四
初一 1班  英语 王五
初一 2班  美术 张三
...
T2
年级 班级 星期   节次   科目
初一 1班  星期一 第3节  语文
初一 1班  星期一 第1节  数学
初一 1班  星期三 第2节  美术
初一 2班  星期一 第6节  美术
 ...
我要得到我的(用户是变量)今天(通过DateTime得到今天是星期几)的课程表,即:假设我是张三,今天是星期一,我的课表行如:
科目  语文            美术
节次 初一1班第3节    初一2班第6节
     

解决方案 »

  1.   


    create table t1(年级 varchar(10),班级 varchar(10),科目 varchar(10),教师 varchar(10))
    insert into t1 select '初一','1班','语文','张三'
    insert into t1 select '初一','1班','数学','李四'
    insert into t1 select '初一','1班','英语','王五'
    insert into t1 select '初一','2班','美术','张三'
    create table t2(年级 varchar(10),班级 varchar(10),星期 varchar(10),节次 varchar(10),科目 varchar(10))
    insert into t2 select '初一','1班','星期一','第3节','语文'
    insert into t2 select '初一','1班','星期一','第1节','数学'
    insert into t2 select '初一','1班','星期三','第2节','美术'
    insert into t2 select '初一','2班','星期一','第6节','美术'
    create proc os_t
    @教师 varchar(10),
    @星期 varchar(10)
    as
    select a.*,b.星期,b.节次 into #t from t1 a,t2 b where a.年级=b.年级 and a.班级=b.班级 and a.科目=b.科目 
    and a.教师=@教师 and b.星期=@星期
    declare @sql varchar(8000),@sql1 varchar(8000)
    set @sql='select ''科目'''
    select @sql=@sql+',['+科目+']=max(case 科目 when '''+科目+''' then 科目 else '''' end)' from #t
    set @sql=@sql+' from #t'
    set @sql1='select ''节次'''
    select @sql1=@sql1+',['+节次+']=max(case 节次 when '''+节次+''' then 年级+班级+节次 else '''' end)' from #t
    set @sql1=@sql1+' from #t'
    exec(@sql+' union all '+@sql1)

    exec os_t '张三','星期一'
      

  2.   

    /*创建表*/
    CREATE TABLE [T1]
    (
    [年级] NCHAR(2),
    [班级] NCHAR(2),
    [科目] NCHAR(2),
    [教师] NCHAR(2)
    )
    CREATE TABLE [T2]
    (
    [年级] NCHAR(2),
    [班级] NCHAR(2),
    [星期] NCHAR(3),
    [节次] NCHAR(3),
    [科目] NCHAR(2)
    )
    GO
    /*
    插入一些数据
    */
    INSERT INTO [T1]
    SELECT '初一','1班','语文','张三' UNION ALL
    SELECT '初一','1班','数学','李四' UNION ALL
    SELECT '初一','1班','英语','王五' UNION ALL
    SELECT '初一','2班','美术','张三'INSERT INTO [T2]
    SELECT '初一','1班','星期六','第3节','语文' UNION ALL
    SELECT '初一','1班','星期一','第1节','数学' UNION ALL
    SELECT '初一','1班','星期三','第2节','美术' UNION ALL
    SELECT '初一','2班','星期六','第6节','美术'/*需求查询*/
    DECLARE @teacher NCHAR(2)--给出的教师名
    SET @teacher='张三'DECLARE @sql VARCHAR(8000)
    SET @sql=''SELECT @sql=@sql+',['+[科目]+']=MAX(CASE WHEN [科目]='''+[科目]+''' THEN [年级]+[班级]+[节次] ELSE NULL END)'
    FROM(
    SELECT  [T2].[科目]
    FROM [T1] JOIN [T2] ON [T1].[年级]=[T2].[年级] AND [T1].[班级]=[T2].[班级]
    WHERE [T2].[星期]=DATENAME(WEEKDAY,GETDATE()) AND [T1].[教师]=@teacher
    ) [T]
    EXEC('SELECT [科目]=''节次'''+@sql
    +'FROM
    (
    SELECT  [T2].*
    FROM [T1] JOIN [T2] ON [T1].[年级]=[T2].[年级] AND [T1].[班级]=[T2].[班级]
    WHERE [T2].[星期]=DATENAME(WEEKDAY,GETDATE()) AND [T1].[教师]='''+@teacher+'''
    ) T')
    GO
    /*删除创建的俩表*/DROP TABLE [T1]
    DROP TABLE [T2]/* 结果科目   语文      美术      
    ---- ------- ------- 
    节次   初一1班第3节 初一2班第6节*/
      

  3.   

    to 背着灵魂漫步:
    谢谢!
    运行信息:
    所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)
    (所影响的行数为 1 行)无法在 sysdepends 中添加当前存储过程所对应的行,因为缺少该存储过程所依赖的对象 'os_t'。仍将创建该存储过程。