信息技术

当前位置: 主页 > 数据库 > MSSQL >

SQL2005下的OVER PARTITION实例

时间:2010-05-20 11:40来源:未知 作者:admin 点击:
SELECT strAreaName AS 区域, strTeacherName AS 姓名, SUM(decDuration) OVER(PARTITION BY intAreaID,intTeacherID,strTmp_Traini

 SELECT
  strAreaName AS 区域,
  strTeacherName AS 姓名,
  SUM(decDuration) OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 时间,
  SUM(intTraineesNumber) OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 培训总人数,
  COUNT(1) OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 培训总次数,
  SUM(CASE WHEN intTrainingType IN (1,3) THEN 1 ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 内训次数,
  SUM(CASE WHEN intTrainingType IN (2,4) THEN 1 ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 出差次数,
  SUM(CASE WHEN intTrainingType IN (2,4) THEN (decGrants + decCost) ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 出差总费用,
  strWorkContent AS 日常工作详细,
  strCourseTitle AS 主要培训内容,
  SUM(CASE WHEN intAttendanceStatusID = 5 THEN 1 ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 加班天数,
  SUM(CASE WHEN intAttendanceStatusID IN (1,4,7,8,5) THEN 1 ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 上班天数,
  SUM(CASE WHEN intAttendanceStatusID IN (2,3) THEN 1 ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 休息的天数,
  SUM(CASE WHEN intAttendanceStatusID IS NOT NULL THEN 1 ELSE 0 END)
OVER(PARTITION BY  intAreaID,intTeacherID,strTmp_TrainingType) AS 总的上班天数,
  intTrainingType,
  ROW_NUMBER() OVER(PARTITION BY intTeacherID,intAreaID, strTmp_TrainingType ORDER BY intTeacherID) AS rowNumber
FROM   v_TrainingInfo
WHERE intTrainingType < 5

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片