CREATE FUNCTION Get_JX
(
@DeptID varchar(50),
@Xtlx varchar(50)
)
RETURNS
@ResultTB Table
(
Dxsid [varchar](50), --大学生id
DxsName [varchar](50), --大学生姓名
Gwid [varchar](50), --见习岗位id
Jxtgf [bit], --见习通过否
Status [varchar](50), --见习习异常状态()
JXDays [varchar](50), --见习天数
JHDays [varchar](50), --计划见习天数
GwName [varchar](50) --岗位名称
)
AS
BEGIN
INSERT INTO @ResultTB
SELECT DISTINCT DXS.TableKey,DXS.姓名,bb.工作岗位id,DXS.通过见习否 ,CASE WHEN JX.TableKey IS NULL THEN 100 WHEN ZS<30*JX.在岗时间 THEN 1 ELSE 0 END Status ,TJ.ZS,GWZD.在岗时间,GWZD.工作岗位
from
--筛选大学生信息
(
SELECT a.*,@Xtlx xtlx from view_大学生信息 a
JOIN [dbo].[Get_SubDept](@DeptID) ON deptid=接收单位id --按单位筛选
Where a.有效否=1
) DXS
LEFT join 系统必备岗位 BB --连接必备岗位
on dxs.xtlx=bb.系统编码
LEFT join --连接见习表
(SELECT SJ.TableKey,SJ.见习岗位id,JH.大学生id DXSID,DATEDIFF(DAY,SJ.见习时间始,SJ.见习时间止) AS JXTS,SJ.在岗时间,SJ.工作岗位
FROM VIEW_实际见习情况 SJ INNER JOIN VIEW_见习计划 JH
ON SJ.见习计划id=JH.TableKey
) JX
ON bb.工作岗位id=JX.见习岗位id AND DXS.TableKey=JX.DXSID
LEFT JOIN --连接每个人每种岗位的见习总时间`
(
SELECT DA.DXSID,DA.见习岗位id,SUM(DATEDIFF(DAY,DA.见习时间始,DA.见习时间止)) AS ZS FROM
(SELECT SJ.TableKey,SJ.见习岗位id,JH.大学生id DXSID,SJ.见习时间始,SJ.见习时间止 FROM VIEW_实际见习情况 SJ INNER JOIN VIEW_见习计划 JH
ON SJ.见习计划id=JH.TableKey
) AS DA
group by DA.DXSID,DA.见习岗位id
) AS TJ
ON
DXS.TableKey= TJ.DXSID
AND
JX.见习岗位id=TJ.见习岗位id
LEFT JOIN 字典_工作岗位 AS GWZD
ON BB.工作岗位id=GWZD.TableKey
RETURN
END
因为TJ 里的总数是已经统计了同一岗位所有的实际见习时间的,在后台对一个人所有培养经历进行统计时会出现重复统计现象(可能在同个岗位有多次见习经历),所以加了
DISTINCT 进去,以后再要加字段进去不知道会不会出问题,都是摸着石头过河,唉!