我是一名學生,這是我功課的一部分。更新和功能
我有10%至更新兩個僱員的工資......是有一個功能或做我要計算的數字,只是改變數,即
更新員工 一套工資= 10 哪裏工資= 51000
這是整個問題: 選擇一個EEO-1等級: 增加所有員工的工資有: 10%選擇EEO-1的分類。
EEO分類位於職位表中,而薪資位於員工表中。我也需要以某種方式加入他們。它需要一個單獨的語句...
感謝
我是一名學生,這是我功課的一部分。更新和功能
我有10%至更新兩個僱員的工資......是有一個功能或做我要計算的數字,只是改變數,即
更新員工 一套工資= 10 哪裏工資= 51000
這是整個問題: 選擇一個EEO-1等級: 增加所有員工的工資有: 10%選擇EEO-1的分類。
EEO分類位於職位表中,而薪資位於員工表中。我也需要以某種方式加入他們。它需要一個單獨的語句...
感謝
由於這是作業,您需要知道智能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
);
話又說回來,企業將需要過去的工資以及目前的工資(例如能夠申報納稅申報表),因此工資單可能是一個有效狀態的時間表,您需要爲每位員工查找最新的狀態......您知道,我對此的看法越多我相信這個企業根本就不存在。我的建議是,假設這是一個技巧性的問題,並拒絕回答,直到他們至少修復了這個模式爲止......也許在夏季時詢問有關實習的事情,這樣你就可以自己修復它...
與更新的祕訣是要確保你可以做選擇第一。
因此,請專注於如何獲得您想要選擇的所有字段。
你的鑰匙將是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*
喜歡的東西:
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
既然是家庭作業,我給你一些提示:
您可以使它等於它本身+ 10%更新工資或乘由110%
第二個表可以在where子句中解決;提示:每個表中都需要有一個等同的字段。
EEo-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表之間有一些聯繫。我還假設職位是一個字符串,而不是一個整數。希望這給你粗略的語法你需要的大綱。
誘惑downvote由於過度的暴躁,但我真的不能看到任何錯誤足以證明downvote的理由。但我想 - 這足夠嗎? – MJB 2010-07-13 15:46:50
@MJB - 隨時倒下:如果我得到三個人,我可以刪除答案並贏得徽章! – onedaywhen 2010-07-14 07:24:43