22,210
社区成员
发帖
与我相关
我的任务
分享
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
if not object_id(N'Tempdb..#1') is null
drop table #1
Go
Create table #1([学科] nvarchar(22),[任课老师] nvarchar(22),[教学业绩] decimal(18,2))
Insert #1
select N'语文',N'科1',40 union all
select N'语文',N'语2',39.75 union all
select N'语文',N'语3',36.98 union all
select N'语文',N'语4',38.44 union all
select N'语文',N'语1',40 union all
select N'语文',N'语2',39.75 union all
select N'语文',N'语3',36.98 union all
select N'数学',N'数1',40 union all
select N'数学',N'数2',39.14 union all
select N'数学',N'数3',39.24 union all
select N'数学',N'数4',38.17 union all
select N'数学',N'数5',38.08 union all
select N'数学',N'数6',38.68 union all
select N'数学',N'数7',37.75 union all
select N'英语',N'英1',39.9 union all
select N'英语',N'英2',39.73 union all
select N'英语',N'英3',36.69 union all
select N'英语',N'英4',36.74 union all
select N'英语',N'英5',40 union all
select N'英语',N'英6',36.13 union all
select N'英语',N'英7',36.84 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',38 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',37 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',40
Go
SELECT [任课老师]
, CASE WHEN COUNT(*)>1 THEN SUM([教学业绩]* CASE WHEN [学科]IN (N'语文',N'数学',N'英语') THEN 0.7 ELSE 0.3 END ) ELSE SUM([教学业绩]) END AS [教学业绩]
FROM (SELECT [任课老师],[学科],AVG([教学业绩])AS [教学业绩] FROM #1 GROUP BY [任课老师],[学科]) AS t
GROUP BY [任课老师];
/*
任课老师 教学业绩
科1 39.785714
数1 40.000000
数2 39.140000
数3 39.240000
数4 38.170000
数5 38.080000
数6 38.680000
数7 37.750000
英1 39.900000
英2 39.730000
英3 36.690000
英4 36.740000
英5 40.000000
英6 36.130000
英7 36.840000
语1 40.000000
语2 39.750000
语3 36.980000
语4 38.440000
*/
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([学科] nvarchar(22),[任课老师] nvarchar(22),[教学业绩] decimal(18,8))
Insert #T
select N'语文',N'科1',40 union all
select N'语文',N'语2',39.75 union all
select N'语文',N'语3',36.98 union all
select N'语文',N'语4',38.44 union all
select N'语文',N'语1',40 union all
select N'语文',N'语2',39.75 union all
select N'语文',N'语3',36.98 union all
select N'数学',N'数1',40 union all
select N'数学',N'数2',39.14 union all
select N'数学',N'数3',39.24 union all
select N'数学',N'数4',38.17 union all
select N'数学',N'数5',38.08 union all
select N'数学',N'数6',38.68 union all
select N'数学',N'数7',37.75 union all
select N'英语',N'英1',39.9 union all
select N'英语',N'英2',39.73 union all
select N'英语',N'英3',36.69 union all
select N'英语',N'英4',36.74 union all
select N'英语',N'英5',40 union all
select N'英语',N'英6',36.13 union all
select N'英语',N'英7',36.84 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',38 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',37 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',40
Go
--测试数据结束
SELECT t.任课老师 ,
SUM(t.教学业绩 * ( CASE WHEN 学科数量 > 1
AND 学科 IN ( '语文', '数学', '英语' ) THEN 0.7
WHEN 学科数量 > 1
AND 学科 NOT IN ( '语文', '数学', '英语' ) THEN 0.3
ELSE 1
END )) AS 教学业绩
FROM ( SELECT AVG(教学业绩) AS 教学业绩 ,
COUNT(学科) OVER ( PARTITION BY 任课老师 ORDER BY GETDATE() ) AS 学科数量 ,
任课老师 ,
学科
FROM #T
GROUP BY 学科 ,
任课老师
) t
GROUP BY t.任课老师
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([学科] nvarchar(22),[任课老师] nvarchar(22),[教学业绩] decimal(18,8))
Insert #T
select N'语文',N'科1',40 union all
select N'语文',N'语2',39.75 union all
select N'语文',N'语3',36.98 union all
select N'语文',N'语4',38.44 union all
select N'语文',N'语1',40 union all
select N'语文',N'语2',39.75 union all
select N'语文',N'语3',36.98 union all
select N'数学',N'数1',40 union all
select N'数学',N'数2',39.14 union all
select N'数学',N'数3',39.24 union all
select N'数学',N'数4',38.17 union all
select N'数学',N'数5',38.08 union all
select N'数学',N'数6',38.68 union all
select N'数学',N'数7',37.75 union all
select N'英语',N'英1',39.9 union all
select N'英语',N'英2',39.73 union all
select N'英语',N'英3',36.69 union all
select N'英语',N'英4',36.74 union all
select N'英语',N'英5',40 union all
select N'英语',N'英6',36.13 union all
select N'英语',N'英7',36.84 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',38 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',37 union all
select N'科学',N'科1',40 union all
select N'科学',N'科1',40
Go
--测试数据结束
SELECT t.任课老师 ,
SUM(t.教学业绩 * ( CASE WHEN 学科 IN ( '语文', '数学', '英语' ) THEN 0.7
ELSE 0.3
END )) AS 教学业绩
FROM ( SELECT AVG(教学业绩) AS 教学业绩 ,
任课老师 ,
学科
FROM #T
GROUP BY 学科 ,
任课老师
) t
GROUP BY t.任课老师
use Tempdb
go
--> --> 中国风(Roy)生成測試數據
if not object_id(N'Tempdb..#1') is null
drop table #1
Go
Create table #1([班级] int,[学科] nvarchar(22),[任课老师] nvarchar(22),[教学业绩] decimal(18,2),[及格率业绩] decimal(18,2),[优生率业绩] decimal(18,2))
Insert #1
select 401,N'语文',N'科1',40,5.00,8.56 union all
select 402,N'语文',N'语2',39.75,5.00,7.00 union all
select 403,N'语文',N'语3',36.98,5.00,4.28 union all
select 404,N'语文',N'语4',38.44,5.00,2.33 union all
select 405,N'语文',N'语1',40,5.00,7.00 union all
select 406,N'语文',N'语2',39.75,5.00,3.11 union all
select 407,N'语文',N'语3',36.98,5.00,2.72 union all
select 401,N'数学',N'数1',40,5.00,8.56 union all
select 402,N'数学',N'数2',39.14,5.00,7.00 union all
select 403,N'数学',N'数3',39.24,5.00,4.28 union all
select 404,N'数学',N'数4',38.17,5.00,2.33 union all
select 405,N'数学',N'数5',38.08,5.00,7.00 union all
select 406,N'数学',N'数6',38.68,5.00,3.11 union all
select 407,N'数学',N'数7',37.75,5.00,2.72 union all
select 401,N'英语',N'英1',39.9,4.98,8.56 union all
select 402,N'英语',N'英2',39.73,5.70,7.00 union all
select 403,N'英语',N'英3',36.69,4.74,4.28 union all
select 404,N'英语',N'英4',36.74,4.87,2.33 union all
select 405,N'英语',N'英5',40,5.33,7.00 union all
select 406,N'英语',N'英6',36.13,4.47,3.11 union all
select 407,N'英语',N'英7',36.84,4.83,2.72 union all
select 401,N'科学',N'科1',40,5.09,8.56 union all
select 402,N'科学',N'科1',38,5.25,7.00 union all
select 403,N'科学',N'科1',40,4.98,4.28 union all
select 404,N'科学',N'科1',40,4.58,2.33 union all
select 405,N'科学',N'科1',37,4.79,7.00 union all
select 406,N'科学',N'科1',40,5.06,3.11 union all
select 407,N'科学',N'科1',40,5.25,2.72
Go
SELECT [任课老师]
, COUNT([班级]) AS [任教班数]
, AVG([教学业绩]) AS [教学业绩]
, AVG([及格率业绩]) AS [及格率业绩]
, AVG([优生率业绩]) AS [优生率业绩]
FROM #1
GROUP BY [任课老师];
/*
任课老师 任教班数 教学业绩 及格率业绩 优生率业绩
科1 8 39.375000 5.000000 5.445000
数1 1 40.000000 5.000000 8.560000
数2 1 39.140000 5.000000 7.000000
数3 1 39.240000 5.000000 4.280000
数4 1 38.170000 5.000000 2.330000
数5 1 38.080000 5.000000 7.000000
数6 1 38.680000 5.000000 3.110000
数7 1 37.750000 5.000000 2.720000
英1 1 39.900000 4.980000 8.560000
英2 1 39.730000 5.700000 7.000000
英3 1 36.690000 4.740000 4.280000
英4 1 36.740000 4.870000 2.330000
英5 1 40.000000 5.330000 7.000000
英6 1 36.130000 4.470000 3.110000
英7 1 36.840000 4.830000 2.720000
语1 1 40.000000 5.000000 7.000000
语2 2 39.750000 5.000000 5.055000
语3 2 36.980000 5.000000 3.500000
语4 1 38.440000 5.000000 2.330000
*/