存储过程较慢请求优化

USE [BJnetwork929]
GO
/****** Object:  StoredProcedure [db_accessadmin].[Up_Bap_SearchStudentStudyConditionNew]    Script Date: 03/10/2011 17:28:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  付超
-- Create date: 2009-05-14
-- Description: 教师查看学生的学习情况
-- =============================================
ALTER PROCEDURE [db_accessadmin].[Up_Bap_SearchStudentStudyConditionNew]
 @CourseID int,
 @ClassID int,
 @TeamID  int
AS
SELECT UserName     --用户名
  ,ActualName    --真实姓名
  ,ProvinceName   --省份名称
  ,Company    --单位
  ,CourseName    --课程名称
  ,OT.StudyTime   --在线学习时间
  ,OT.StudyCount   --在线学习次数
  ,ISNULL(HT.SubmitCouont,0) AS SubmitCouont  --提交作业数
  --EDIT BY LZH START 2010.03.20
  --,ISNULL(WT.NOSubmitCouont,0) AS NOSubmitCouont --未提交作业数
  ,ISNULL(HT.NOSubmitCouont,0) AS NOSubmitCouont --未提交作业数
  --EDIT BY LZH END
  ,ISNULL(HS.ExerciseScore,0) + ISNULL(ER.ExaminationScore,0) + ISNULL(A.AdditionScore,0) AS GeneralAchievement --总成绩
  ,CU.CourseID   --课程ID
  ,TC.TeamID    --组ID
  ,SU.StudentUserID  --用户ID
FROM [db_owner].StudentUser SU --学员用户表
  INNER JOIN [db_owner].UserInfo UI ON SU.StudentUserID = UI.StudentUserID   --用户表
  LEFT JOIN [db_owner].SYS_ProvinceCode PC ON UI.Province = PC.ProvinceID    --省份表
  INNER JOIN [db_owner].StudyTeamInfoUser ST ON UI.StudentUserID = ST.StudentUserID --学习小组与用户关联表
  INNER JOIN [db_owner].StudyTeamInfoClass TC ON ST.TeamID = TC.TeamID    --学习小组与班级关联表
  --查询学生在线学习次数和在线学习时间
  INNER JOIN (SELECT StudentUserID
     ,CourseID
     ,COUNT(OnlineLearningRecorderID) AS StudyCount
     ,ISNULL(SUM(DateDiff(n,StartTime,EndTime)),0) AS StudyTime
     FROM [db_owner].OnlineLearningRecorder --在线学习记录
     WHERE CourseID = @CourseID
     GROUP BY StudentUserID,CourseID) AS OT ON SU.StudentUserID = OT.StudentUserID
  INNER JOIN [db_owner].Course CU ON OT.CourseID = CU.CourseID      --课程表'
  --查询学生提交作业数
  --edit by lzh start 2010.03.20
  --LEFT JOIN (SELECT TD.CourseID,StudentUserID,COUNT(ExerciseSubjectID) AS SubmitCouont
  LEFT JOIN (SELECT TD.CourseID,TU.StudentUserID,COUNT(EU.ExerciseSubjectID) AS SubmitCouont
     ,COUNT(ES.ExerciseSubjectID)-COUNT(EU.ExerciseSubjectID) AS NOSubmitCouont
  --edit by lzh end
     FROM  [db_owner].ExerciseSubject ES --作业表
      INNER JOIN [db_owner].[CoursePlanUnit] CP ON ES.CoursePlanUnitID = CP.CoursePlanUnitID --课程计划单元表
      INNER JOIN [db_owner].[TeachPlan] TP ON CP.TeachPlanID = TP.TeachPlanID     --教学计划表
      INNER JOIN [db_owner].[TeachDocment] TD ON TP.TeachDocumentID = TD.TeachDocmentID  --教学文档表
      INNER JOIN [db_owner].Class CL ON CL.CourseID = TD.CourseID AND CL.CourseID = @CourseID AND CL.ClassID = @ClassID
      INNER JOIN [db_owner].StudyTeamInfoClass TC ON CL.ClassID = TC.ClassID
      INNER JOIN [db_owner].StudyTeamInfoUser TU ON TC.TeamID = TU.TeamID
  --add by lzh start 2010.03.20
      LEFT JOIN
      (SELECT DISTINCT ExerciseSubjectID,StudentUserID FROM db_owner.ExerciseUpload) AS EU
      ON ES.ExerciseSubjectID = EU.ExerciseSubjectID
      AND TU.StudentUserID = EU.StudentUserID
     GROUP BY TD.CourseID,TU.StudentUserID ) AS HT ON CU.CourseID = HT.CourseID AND SU.StudentUserID = HT.StudentUserID
  --查询学生的作业总分数
  --edit by lzh 2010.3.24 start
  LEFT JOIN(SELECT Convert(numeric(10,2),SUM(ER.Score*(SE.Rate/100.00))) AS ExerciseScore,ER.StudentUserID
     FROM [db_owner].CourseStatisticRate CS  --课程权重关联表
       INNER JOIN [db_owner].StatisticRateExercise SE ON CS.StatisticRateID = SE.StatisticRateID --权重作业关联表
       INNER JOIN [db_owner].ExerciseResult ER ON  SE.ExerciseSubjectID = ER.ExerciseContentID  --作业结果
       inner join
       (
        select ExerciseResult.ExerciseContentID,ExerciseResult.StudentUserID
        ,MAX(ExerciseResult.ExerciseUploadID) as ExerciseUploadID
        from db_owner.ExerciseResult
        --add by liuzhh 2010.4.30 start
        where Teacher != ''
        --add end
        group by ExerciseResult.ExerciseContentID,ExerciseResult.StudentUserID
       ) as ERM
       on ER.ExerciseContentID = ERM.ExerciseContentID
       and ER.StudentUserID = ERM.StudentUserID
       and ER.ExerciseUploadID = ERM.ExerciseUploadID
     WHERE CS.CourseID = @CourseID AND CS.ClassID = @ClassID AND State = 1 AND Score > 0
     GROUP BY ER.StudentUserID) HS ON SU.StudentUserID = HS.StudentUserID
  --查询学生的试卷总分数
  --edit by lzh 2010.3.24 start
  LEFT JOIN(SELECT Convert(numeric(10,2),SUM(RE.Score*(ES.Rate/100.00))) AS ExaminationScore,RE.StudentUserID
     FROM [db_owner].CourseStatisticRate CS  --课程权重关联表
       INNER JOIN [db_owner].StatisticRateExamination ES ON CS.StatisticRateID = ES.StatisticRateID --权重评测关联表
       INNER JOIN [db_owner].ExamimationResult RE ON ES.ExaminationID = RE.ExaminationID   --答卷结果
       inner join
       (
        select MAX(ExaminationResultID) as ExaminationResultID
        from db_owner.ExamimationResult
        group by ExaminationID,StudentUserID
       ) as REM
       on RE.ExaminationResultID = REM.ExaminationResultID
     WHERE CS.CourseID = @CourseID AND CS.ClassID = @ClassID AND State = 1 AND RE.TeacherUserID IS NOT NULL
     GROUP BY RE.StudentUserID) ER ON SU.StudentUserID = ER.StudentUserID
  --查询学生的附加总分数
  LEFT JOIN(SELECT StudentUserID,Convert(numeric(10,2),SUM(AdditionScore)) AS AdditionScore
     FROM (
      SELECT StudentUserID,SUM(Score*(Rate/100.00)) AS AdditionScore
      FROM [db_owner].CourseStatisticRate CS   --课程权重关联表
        INNER JOIN [db_owner].StatisticRateAddition SA ON CS.StatisticRateID = SA.StatisticRateID --权重附加分关系表
        INNER JOIN [db_owner].AdditionScore A ON SA.AdditionID = A.AdditionID      --学生附加分表
      WHERE A.CourseID = @CourseID AND A.ClassID = @ClassID AND State = 1
      GROUP BY CS.StatisticRateID,A.AdditionID,Rate,StudentUserID) AS AC
     GROUP BY StudentUserID ) A ON SU.StudentUserID = A.StudentUserID   
WHERE SU.UserType = 0 AND CU.CourseID = @CourseID  AND TC.ClassID = @ClassID 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值