我是一名学生,这是我家庭作业的一部分。
我必须通过10%...is更新两个员工的工资,有一个函数可以这样做,或者我必须计算这些数字,然后更改数字,即
更新Employee set Wage=10 where Wage=51000
这就是整个问题:选择一个EEO-1分类:将具有所选EEO-1分类的所有员工的工资增加10%。
EEO分类位于“职务”表中,薪资位于“员工表”中。我也需要以某种方式加入他们。它需要是一个单独的声明...
谢谢
发布于 2010-07-13 18:55:16
由于这是家庭作业,你需要知道聪明的alec答案。使用JOIN语法发布的答案是错误的,因为它是专有代码。正确的alec答案是使用标准SQL (最好是您选择的方言支持的SQL,例如SQL Server)。您还应该指出,ISO/IEC 11179数据元素名称标准要求可能有多个成员的集合使用复数名称(例如,JobTitles而不是JobTitle),并查找企业中已使用的已建立的集合名称(例如,人员而不是员工)。此外,如果职位属性是使用单独的表建模的,那么salaries也应该有自己的表(并且命名为Payroll,而不是Salaries):
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
);然后,企业需要过去的工资以及当前的工资(例如,为了能够提交纳税申报单),因此工资很可能是一个有效状态时态表,您需要找到每个员工的最新状态……你知道,我越想这个问题,我就越确信这个企业根本不存在。我的建议是,假设这是一个刁钻的问题,并拒绝回答它,直到他们至少修复了模式……也许可以在暑假问一问实习的事,这样你就可以自己解决问题了……
发布于 2010-07-13 08:30:58
更新的秘诀是确保您可以先进行选择。
因此,请关注如何获取所有想要选择的字段。
你的关键将是一个Inner Join (毫无疑问,有人会给出一个完整的答案,但我反对打断学习过程)。
接下来,您需要解决如何计算工资的问题。
幸运的是,您可以首先在您的select中执行此操作,以确保您在正确的轨道上。
类似于:
SELECT *, (wage*1.1) as newWage FROM Employee
*INNER JOIN STUFF*
WHERE *CONDITION STUFF (EEO-1 etc.)*一旦您对select看起来不错感到满意,就可以将其转换为更新,最酷的是您可以实际更新连接查询,只需抓取select、inner和where内容即可。
UPDATE Employee
SET Salary.Wage = (wage*1.1)
FROM Employee
* INNER JOIN STUFF*
WHERE *CONDITION STUFF*发布于 2010-07-13 08:37:38
您需要的是一条使用内部联接的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表之间有一些链接。我还假设Job Title是一个字符串,而不是一个整数。希望这能为您提供所需语法的大致轮廓。
https://stackoverflow.com/questions/3233332
复制相似问题