建立视图解决有3张表
表结构如下
第一张表  ExamPager (试卷表)            列            类型            注释
[ExamID]    [nvarchar](15)     试卷ID
[Title]     [nvarchar](50)     试卷名称
[TotalScore] [int]             试卷总分
[CreateMan] [nvarchar](30)     创建人
[CreateDate] [datetime]        创建时间
[ModifyBy]  [nvarchar]         修改人
[ModifyDate] [nvarchar]        修改日期
[State]     [bit]              状态
[Note]      [nvarchar](100)    备注
第二张表 StuASVAnswer  主观题表   用于存放每一道主观题  和 学生得分列名         类型            注释     
[ID]         [int]          序列号
[StuID]    [nvarchar](30)   学生ID
[ExamID]   [nvarchar](15)   试卷ID
[SubjectID]  [int]          试题ID
[KnowID]     [int]          知识点ID
[FactScore] [float]         分数
第三张表  StuVKGAnswer 客观题表   用于 存放 试卷中的 每 一 道 客 观题题 和 学生得分列名           类型              注释
[ID]        [int]               序列号
[StuID]     [nvarchar](30)      学生ID
[ExamID]    [nvarchar](15)      试卷ID
[SubjectID] [int]               题目ID
[StuAnswer] [nvarchar](10)      答案
[FactScore] [float]             分数
[Note] [nvarchar](100)          备注3张表之间的关系试卷总分=客观题分数+主观题分数要求:根据  学生ID  求该学生的 考试试卷的  其中学生为多个学生 因为是用学生ID 做条件 所以就不用建立学生表了   只需要在客观和主观题中 对应即可  试卷为多张~~试卷编号  试卷名称  试卷总分数  学生总分数  学生排名

解决方案 »

  1.   

    必须用到临时表或表变量
      select  IDENTITY(int,1,1) as ID_Num,t.ExamID,t.FactScore into #FactScore
        from (select  distinct
                      E.ExamID,
                     (A.FactScore + V.FactScore) as FactScore
                from  ExamPager E, StuASVAnswer A, StuVKGAnswer V
               where  E.ExamID = A.ExamID
                 and  E.ExamID = V.ExamID
            order by  E.ExamID,学生总分数 desc) t    
                      select    
              C.ExamID          as 试卷编号,
              C.Title           as 试卷名称,
              C.TotalScore      as 试卷总分数,
              F.FactScore       as 学生总分数
             (F.ID_Num - min(F.ID_Num) + 1)
                                as 学生排名
        from  #FactScore F ,(select  E.ExamID,
                                     E.Title,
                                     E.TotalScore,
                                    (A.FactScore + V.FactScore) as FactScore
                               from  ExamPager E, StuASVAnswer A, StuVKGAnswer V
                              where  E.ExamID = A.ExamID
                                and  E.ExamID = V.ExamID) C
       where  F.ExamID    = C.ExamID
         and  F.FactScore = C.FactScore
    group by  试卷编号,试卷名称,试卷总分数,学生总分数
      

  2.   

      select  IDENTITY(int,1,1) as ID_Num,t.ExamID,t.sumScore into #FactScore
        from (select  distinct
                      E.ExamID,
                     (A.FactScore + V.FactScore) as sumScore
                from  ExamPager E, StuASVAnswer A, StuVKGAnswer V
               where  E.ExamID = A.ExamID
                 and  E.ExamID = V.ExamID
                 and  E.StuID  = V.StuID
            order by  E.ExamID,sumScore desc) t    
                    
      select    
              C.ExamID                 as 试卷编号,
              C.Title                  as 试卷名称,
              C.TotalScore             as 试卷总分数,
              F.sumScore               as 学生总分数
              (F.ID_Num - M.minNum + 1)  as 学生排名
        from  #FactScore F ,
             (select  E.ExamID,
                      E.Title,
                      E.TotalScore,
                     (A.FactScore + V.FactScore) as sumScore
                from  ExamPager E, 
                      StuASVAnswer A, 
                      StuVKGAnswer V
               where  E.ExamID = A.ExamID
                 and  E.ExamID = V.ExamID) C,
             (select  min(ID_Num) as minNum,
                      ExamID 
                from #FactScore 
            group by  ExamID) M
       where  F.ExamID    = C.ExamID
         and  F.ExamID    = M.ExamID
         and  F.sumScore  = C.sumScore
      

  3.   

    这结构设计的
    不过还不清楚楼主的目的啊
    就是根据学生ID找出这个学生考过的试卷?
    这样的话直接
    select * from ExamPager where ExamID in(select ExamID from StuASVAnswer where StuID=1 union select ExamID from StuVKGAnswer where StuID=1)
    可以不?
      

  4.   


    你要学生表啊  随便整一个··ID     学生ID
    name   学生名字完了··