求一个有点难度的SQL语句或者实现方法

时间:2021-10-30 16:46:15

我有三个表:
职员表:
CREATE TABLE [Sw_users] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--员工姓名
[dept] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--员工所在部门
[pid] [int] NULL CONSTRAINT [DF_users_pid] DEFAULT (1),--排列顺序
CONSTRAINT [PK_Sw_users] PRIMARY KEY  CLUSTERED
(
[id]
)  ON [PRIMARY]
) ON [PRIMARY]
GO


月度绩效考核表:

CREATE TABLE [person] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--员工姓名[dept] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--员工所在部门[months] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--考核月份
[rescores] [money] NULL ,--本月得分
CONSTRAINT [PK_person] PRIMARY KEY  CLUSTERED
(
[id]
)  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

年度考核表:
CREATE TABLE [years] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--员工姓名
[dept] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--员工所在部门
[years] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--考核年份
[rescores] [money] NULL ,--本年度得分
CONSTRAINT [PK_years] PRIMARY KEY  CLUSTERED
(
[id]
)  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


按照公司的考核制度:
1、每个月都对每个员工评一次分,存入person表。
2、每年底由领导对每个员工做一次总的评分,存入years表。
3、而每个月工的年度总得分=员工各月平均分*60%+年底分数*40%。

要求有个总列表可以按部门列出所有的员工然后列出他的月度平均分,年底得分,年度总得分。

                   市场部

张三[月度:98年底:99,总得分:98.95] 李四[月度:99年底:99总得分:99]
                   综合部

刘德华[月度:98年底:99,总得分:98.95] 周润发[月度:99年底:99总得分:99]

                           ..........................
                           ..........................

我想用一个SQL语句来调出这三项的分,因为牵涉到AVG函数计算月度平均分,一直不成功,大家有什么方法能实现吗?

解答于2007年4月6日

select t1.dept, t1.name,t1.avg(rescorces)*60%+t2.rescorce*80% from
(select dept,name,years,avg(rescores) from person )t1
left join
(select dept ,name,rescores from yesrs)t2
group by t1.dept
on t1.dept=t2.dept and t1.years=t2.years and t1.name=t2.name