這是我在 SSMS 中撰寫的代碼,它可以很好地用于我的目的,但是嘗試使用與 Matillion 相同的原則(是的,我必須在我的公司使用 Matillion)我仍然得到重復的員工,但不能簡單地使用 Distinct,就好像他們辭職了一樣被重新雇用,雇用日期不同,并且被分配了一個新的員工 ID。我只是想制作一個員工匯總表,每個人使用他們最近的雇用日期并排除之前的一個條目,這就是我在 SSMS 中的內容。
SELECT
[PersonId] as 'Employee Id'
,[LastName] as 'Last Name'
,[FirstName] as 'First Name'
,[MiddleName] as 'Middle Name'
,[KnownAs] as 'Goes By'
,[HireDate] as 'Hire Date'
,[Address1] as 'Address'
,[Address2] as 'Address Contd'
,[City] as 'City'
,[State] as 'State'
,[Zip] as 'Zip Code'
,[EmployeeStatus] as 'Employee Status'
,[EmployeeType] as 'Employee Type'
,[BusinessTitle] as 'Business Title'
,[DateofBirth] as 'Date of Birth'
,[Gender] as 'Gender'
,[HomePhone] as 'Phone Number'
,[ReportsToName] as 'Supervisor Name'
,[SupervisorId] as 'Supervisor Id'
,[EmailAddress] as 'Email'
,[JobDescription] as 'Job Description'
,[DepartmentNumber] as 'Dept Number'
,[RaceEthnicty] as 'Race/Ethnicity'
,[PayRate] as 'Pay Rate'
,[FullPartTime] as 'Full / Part Time'
,[PayGroup] as 'Pay Group'
,[SSN] as 'SSN (encrypted)'
,[jobcode] as 'Job Code'
FROM [SuccessFactorsCensus].[dbo].[Census] C
WHERE HireDate=(SELECT MAX(HireDate)
FROM [SuccessFactorsCensus].[dbo].[Census]
WHERE PersonId = C.PersonId)
uj5u.com熱心網友回復:
這將生成一個查詢,該查詢給出與您在上面所做的相同的結果:
對于子查詢:
- 表輸入來自
[SuccessFactorsCensus].[dbo].[Census] - 聚合組件 - 在 PersonId 上添加分組,在列上添加 Max 聚合
HireDate
對于主要查詢:
- 表輸入來自
[SuccessFactorsCensus].[dbo].[Census] - 加入組件
- 使用上面的輸入作為“主表”
- 加入聚合組件的輸出
- 加入型別:左
- 加入運算式:x.PersonId = y.PersonId(將 x/y 替換為您指定的別名)
但是:如果員工每次開始時都會獲得一個新的 PersonId,并且有些人被多次重新雇用,那么您不能使用 PersonId 來鏈接多次雇用的員工的記錄。您需要使用其他一些屬性,例如 SSN 將是一個很好的選擇,因為每個員工每次被雇用時它都應該是相同的。如果您無權訪問它(例如它已加密),那么您可以嘗試使用電子郵件地址或姓名 地址來嘗試獲取唯一人員串列。您需要先解決此問題,然后才能嘗試獲取每個人的最大 HireDate。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456859.html
