2010-07-13 171 views
1

我是一名学生,这是我功课的一部分。更新和功能

我有10%至更新两个雇员的工资......是有一个功能或做我要计算的数字,只是改变数,即

更新员工 一套工资= 10 哪里工资= 51000

这是整个问题: 选择一个EEO-1等级: 增加所有员工的工资有: 10%选择EEO-1的分类。

EEO分类位于职位表中,而薪资位于员工表中。我也需要以某种方式加入他们。它需要一个单独的语句...

感谢

回答

1

由于这是作业,您需要知道智能alec答案。使用JOIN语法发布的答案是错误的,因为它是专有代码。正确的智能alec答案是使用标准SQL(最好是您选择的方言支持的标准SQL,例如SQL Server)。您还应该指出,数据元素名称的ISO/IEC 11179标准要求可能有多个成员(如JobTitles而不是JobTitle)的集合的复数名称,并查找已在企业中使用的已建立集合名称(例如人员而不是员工)。此外,如果职位属性是使用一个单独的表建模,然后薪水应该有自己的表太(并命名为工资,而不是工资):

UPDATE Payroll 
    SET Wage = Wage * 1.1 
WHERE EXISTS (
       SELECT * 
       FROM Employees AS E1 
         INNER JOIN JobTitles AS J1 
         ON E1.employee_number = J1.employee_number 
          AND J1.EEO_classification = 'EEO-1' 
       WHERE E1.employee_number = Payroll.employee_number 
      ); 

话又说回来,企业将需要过去的工资以及目前的工资(例如能够申报纳税申报表),因此工资单可能是一个有效状态的时间表,您需要为每位员工查找最新的状态......您知道,我对此的看法越多我相信这个企业根本就不存在。我的建议是,假设这是一个技巧性的问题,并拒绝回答,直到他们至少修复了这个模式为止......也许在夏季时询问有关实习的事情,这样你就可以自己修复它...

+0

诱惑downvote由于过度的暴躁,但我真的不能看到任何错误足以证明downvote的理由。但我想 - 这足够吗? – MJB 2010-07-13 15:46:50

+0

@MJB - 随时倒下:如果我得到三个人,我可以删除答案并赢得徽章! – onedaywhen 2010-07-14 07:24:43

1

与更新的秘诀是要确保你可以做选择第一。

因此,请专注于如何获得您想要选择的所有字段。

你的钥匙将是Inner Join(毫无疑问,有人会给出一个完整的答案,但我反对中断学习过程)。

接下来,您需要计算出如何计算工资。

幸运的是,你可以在你的选择首先做到这一点,以确保你在正确的轨道上。

喜欢的东西:

SELECT *, (wage*1.1) as newWage FROM Employee 
*INNER JOIN STUFF* 
WHERE *CONDITION STUFF (EEO-1 etc.)* 

一旦你感到高兴的是选择看起来不错,你可以把它变成一个UPDATE和很酷的事情是,你实际上可以更新连接查询,只是抓住你的选择内部联接和哪里东西。

UPDATE Employee 
SET Salary.Wage = (wage*1.1) 
FROM Employee 
* INNER JOIN STUFF* 
WHERE *CONDITION STUFF* 
0

喜欢的东西:

declare @classification varchar(100) 
set @classification = '<your value>' 

update Employee set Wage = Wage *1.10 
join JobTitle on Employee.JobTitleId = JobTitle.JobTitleId 
where JobTitle.[EEO-1 Classification] = @classification 
0

既然是家庭作业,我给你一些提示:

您可以使它等于它本身+ 10%更新工资或乘由110%

第二个表可以在where子句中解决;提示:每个表中都需要有一个等同的字段。

EEo-1分类可以设置为等于参数。

1

你需要的是使用INNER JOIN的UPDATE语句。

UPDATE Employee 
SET Wage = e.Wage * 1.10 
FROM Employee as e 
INNER JOIN JobTitle as jt 
    ON jt.[id] = e.[jobId] 
Where jt.Title = 'EEO-1' 

我不得不在这里对你的模式做一些假设,我假设Employee和Job Title表之间有一些联系。我还假设职位是一个字符串,而不是一个整数。希望这给你粗略的语法你需要的大纲。