2016-01-21 164 views
0

爲什麼我的存儲過程的工作,我寫了一個存儲過程,可以挑選員工數據無論是對他的CURRENT工作或第一份工作或者那麼這兩個只存在CURRENT但我只爲單身員工做到這一點。我無法弄清楚如何爲表中的大量員工選擇它,因爲每個員工都可以有CURRENT或INITIAL或BOTH。所有記錄

ALTER PROCEDURE [dbo].[ReportEmployeeProfile] 0 
AS 
BEGIN 

    SELECT 
     PersonalInfo.pk_PersonalInfo_ID, 
     PersonalInfo.PersonalInfoReligion, 
     PersonalInfo.PersonalInfoPhoneResidence, 
     PersonalInfo.PersonalInfoPhoneoffice, 
     PersonalInfo.PersonalInfoNIC, 
     PersonalInfo.PersonalInfoName, 
     PersonalInfo.PersonalInfoMobile, 
     PersonalInfo.PersonalInfoMaritalStatus, 
     PersonalInfo.PersonalInfoGender, 
     PersonalInfo.PersonalInfoFatherHusbandName, 
     CONVERT(varchar, PersonalInfo.PersonalInfoEntryDateTime, 106), 
     PersonalInfo.PersonalInfoEmailAddress, 
     PersonalInfo.PersonalInfoDomicile, 
     CONVERT(varchar, PersonalInfo.PersonalInfoDOB, 106) AS PersonalInfoDOB, 
     PersonalInfo.PersonalInfoComputerLiterate, 
     PersonalInfo.PersonalInfoAddress, 
     PersonalInfo.fk_WebUsers_PersonalInfo_UserID, 
     PersonalInfoEmployeePicture, 
     ServiceInfo.ServiceInfoInitialBPS, 
     ServiceInfo.ServiceInfoInitialDesignation 
    FROM PersonalInfo 
    INNER JOIN ServiceInfo 
     ON ServiceInfo.fk_PersonalInfo_ServiceInfo_PID = PersonalInfo.pk_PersonalInfo_ID 
    WHERE ServiceInfo.ServiceInfoJobStatus = ? 

更新: JobStatuses: 1 =初始 2 =此前 3 =電流

+0

什麼jobstatus意思?你爲什麼要設置jobstatus 3 – TheGameiswar

+0

等待我更新的問題 – user5820210

+0

@TheGameiswar請 – user5820210

回答

0

也許window function將幫助你解決你的任務。看看這個SQL代碼。我已經使用ROW_NUMBER()函數來計算員工的所有工作狀態並取最後一個。

SELECT T.* FROM 
    (SELECT 
      P.pk_PersonalInfo_ID, 
      P.PersonalInfoReligion, 
      P.PersonalInfoPhoneResidence, 
      P.PersonalInfoPhoneoffice, 
      P.PersonalInfoNIC, 
      P.PersonalInfoName, 
      P.PersonalInfoMobile, 
      P.PersonalInfoMaritalStatus, 
      P.PersonalInfoGender, 
      P.PersonalInfoFatherHusbandName, 
      Convert(varchar, P.PersonalInfoEntryDateTime, 106) AS PersonalInfoEntryDateTime, 
      P.PersonalInfoEmailAddress, 
      P.PersonalInfoDomicile, 
      Convert(varchar,P.PersonalInfoDOB, 106) as PersonalInfoDOB, 
      P.PersonalInfoComputerLiterate, 
      P.PersonalInfoAddress, 
      P.fk_WebUsers_PersonalInfo_UserID, 
      PersonalInfoEmployeePicture, 
      SI.ServiceInfoInitialBPS, 
      SI.ServiceInfoInitialDesignation, 
      ROW_NUMBER() OVER(PARTITION BY P.pk_personalInfo_ID ORDER BY SI.ServiceInfoJobStatus DESC) AS row_num 
    From PersonalInfo AS P 
     JOIN ServiceInfo AS SI ON SI.fk_PersonalInfo_ServiceInfo_PID= P.pk_PersonalInfo_ID) AS T 
WHERE T.row_num = 1 
+0

消息8155,級別16,狀態2 ,第26行 沒有爲'T'的列11指定列名稱。 – user5820210

+0

將名稱添加到此列'Convert(varchar,P.PersonalInfoEntryDateTime,106)' – fabulaspb

+0

不工作我試過 – user5820210